
Linux内核(驱动)移植及研究
文章平均质量分 78
李迟
李迟,男,已婚,字子徐,一字仲文,别号水田居士,木草山人。有一儿一女,李大锤和李大妞。来自广西岑山溪水之地,家在一垌之尾。毕业于桂林电子科技大学三院1专业。摄影师,金融学者,历史家,科学哲学爱好者,社会问题研究者,持证上岗者(架构师、项目管理师),爱好广泛而无精通者。古文、诗词、文学、小说、武侠、经济、社会等无所不涉。目前主要混迹于显示器、鼠标、键盘之间。于代码及兴趣之事中有所得,与好友谈之一二,足矣。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux移植随笔:让内核支持nor flash
Linux移植随笔:让内核支持nor flash原创 2011-03-16 09:09:00 · 3785 阅读 · 5 评论 -
ethtool的内核流程跟踪
这些天开始下决心写写Linux网络方面的文章。由于能力和时间有限,当前还没有对Linux的网络有深入的了解。我一开始打算从网卡基本知识到PHY寄存器,到MAC控制器,到以太网协议栈,一步一步地学习。但实际中发现不能如此,在公司不同在学校,不可能有集中的时间精力去学习的,比如,刚刚使用了iperf来测试网卡性能,又要在内核中打印出PHY芯片寄存器,而前提是要对PHY有一定了解。同时又要了解设备所处的网络拓扑,又不得不去看看交换机方面的资料。在这种情形下,似乎没有规律地做事,完全由工作需求来驱动。在做事的同时我原创 2015-03-30 19:29:41 · 6396 阅读 · 0 评论 -
一个x86平台的spi flash驱动移植笔记
最近一个项目,要用到flash存放一些数据,所以要内核支持。于是就原创 2014-11-21 13:00:54 · 2398 阅读 · 0 评论 -
生成内核版本号头文件的方法
前段时间,公司买了很多块不同厂家的intel的板子。有同事编译不了网卡驱动,我过去看了一下,原来是因为内核版本号的头文件(version.h)没有内容,导致没有定义LINUX_VERSION_CODE,就编译不通过。于是上网找了点资料,学习了一下。编译驱动是需要有内核的头文件的(毕竟驱动还是属于内核空间的东西),而很多程序——包括用户空间的应用程序和内核空间的驱动,是通过是否有内核版本原创 2014-09-20 12:20:40 · 3278 阅读 · 0 评论 -
以太网的phy寄存器分析
一直唠叨说要系统地学习Linux网络驱动,一直没去做。今天终于下决定写篇关于PHY寄存器的文章了,写了这个,再写篇关于PHY驱动的文章,就算给自己交差了。后面的事再议。这篇文章讲述PHY寄存,大部分属于资料收集,但也夹杂着个人的经验、见解。文中结合IEEE802.3标准、网络的分析及对驱动的理解进行描述。一般来说,像SPI、I2C、USB、PCI等总线类型的资料,都会包括电气接口和编程接口,对于以太网也类似,像硬件接口如MII、GMII,本来也想写一篇文章的,但无奈自己对接口没研究,就不写了。原创 2015-04-11 17:38:59 · 35660 阅读 · 2 评论 -
Linux内核生成版本号的一些研究
真正在工作接触内核,其实仅仅是一年前的事情。在使用git管理代码时,发现编译出来的版本会自动带个加号“+”,或者带有“dirty”字样,当时查了些资料解决了。现在隔了那么久,觉得还是有必要写点笔记出来。上面所提到的,实际上是和Linux内核的管理有关的(比如git本地有修改,但未提交,则有“dirty”字符串),由于了解不多,这里不展开了。原创 2015-03-28 08:39:40 · 4043 阅读 · 0 评论 -
再识PCI:一个PCI驱动实例
之前写了第一篇关于PCI的文章,当时只是作为入门的接触笔记,后来对PCI又研究了一下,主要包括PCI设备的扫描过程及PCI驱动注册过程。本文主要给出一个PCI实例,并在内核中做很多的打印以便跟踪其过程。代码参考i2c-i801.c文件,在intel平台上试验。原创 2015-05-06 13:24:47 · 5517 阅读 · 0 评论 -
我的内核学习笔记5:proc目录文件创建及读写
上一篇内核学习笔记《我的内核学习笔记4:sysfs学习》是2013年写的,彼时至今,随着工作的展开和安排,内核方面的知识可谓突飞猛进,当然,其它方面亦是如此。关于内核方面,积累的笔记大大小小有几十篇了,但只是笔记形式或代码片段,无法形成文章,不敢献艺,怕贻笑大方。原创 2016-10-13 22:46:31 · 3650 阅读 · 0 评论 -
一个内核调试函数的实现
最近在研究内核,主要使用printk来跟踪函数的调用过程。但直接使用printk来打印的话,各种信息太多太杂。而且又不想把已经加了的东西删除。于是决定使用打印等级的方式来实现不同各类信息的显示。原创 2016-11-15 23:25:04 · 746 阅读 · 0 评论 -
我的内核学习笔记7:Intel LPC驱动lpc_ich分析
接触这么久的内核代码,还没有真正分析一个完整的驱动源码,都是零零散散写只言片字。本文就作一个尝试,写一写Linux内核源码分析层面的文章。本文介绍基于Intel baytrail系列的e3800系列的SOC的LPC驱动。后续文章将进行该系列的WDT和GPIO驱动分析。原创 2016-12-05 21:12:09 · 6908 阅读 · 0 评论 -
我的内核学习笔记8:多功能设备mfd驱动
前段时间分析了Intel的lpc驱动,里面涉及了mfd,但网络上关于mfd的资料少之又少。所以就自己分析一下代码。本文对Linux内核的mfd设备注册过程进行分析,并结合2个实例,加深对其概念。原创 2016-12-05 22:18:21 · 7842 阅读 · 0 评论 -
我的内核学习笔记9:Intel内部看门狗iTCO_wdt驱动
本文对intel e3800内部看门狗驱动源码进行分析。原创 2016-12-06 22:40:20 · 14702 阅读 · 2 评论 -
我的内核学习笔记10:Intel GPIO驱动源码分析
本文对intel e3800的GPIO驱动源码进行分析。原创 2016-12-07 21:12:43 · 6043 阅读 · 0 评论 -
我的内核学习笔记11:linux leds-gpio驱动应用实例
linux内核的leds-gpio是使用GPIO控制LED的驱动,只要将板子上LED灯对接的GPIO引脚号进行适当的配置,就能使用这个驱动了,十分方便。网上有很多文章分析这个驱动,就不献丑——或者后面闲时再写写吧。原创 2016-12-08 21:13:02 · 11500 阅读 · 8 评论 -
我的内核学习笔记6:PCI驱动probe的一点认知
对于PCI的学习,在文章《初识PCI》和《再识PCI:一个PCI驱动实例》中有介绍,文中使用大量代码进行演示。但总觉得有些认知不到位。于是就再写一文。原创 2016-12-03 13:14:50 · 9615 阅读 · 0 评论 -
我的内核学习笔记12:linux i2c-gpio驱动应用实例
linux内核的i2c-gpio是使用GPIO模拟I2C协议的驱动,只需要配置2根GPIO即可使用。Linux的I2C子系统比较复杂,笔者暂时还没有研究。本着“实用”的目的,介绍一下如何使用这个驱动及一些注意事项。原创 2016-12-09 21:15:48 · 5731 阅读 · 0 评论 -
我的内核学习笔记13:x86平台linux系统重启流程跟踪
一直以来,笔者只知道重启Linux系统性使用reboot,但对其过程却无所知,涉及到哪些知识点也无概念。本文就跟踪一下重启的流程,平台为Intel x86,Linux内核版本为3.17。原创 2017-01-12 19:16:04 · 4805 阅读 · 0 评论 -
Linux内核小笔记:spin_lock锁内不能使用sleep休眠
有一个字符驱动,内部ioctl函数不同的分支均使用spin_lock和spin_unlock,以保证对外设操作的原子性。但是,有一个功能需要对一个GPIO引脚设置上下沿,于是就使用msplee来延时。结果应用层程序在多个线程中调用该驱动提供的ioctl接口时,发现系列卡死了,只能手动复位。原来不能在spin lock中使用sleep。原创 2017-01-12 19:32:53 · 6281 阅读 · 0 评论 -
关于以太网PAUSE的一点研究
在学习自动协商时,发现有以太网PAUSE帧这个东西,很网上资料很少,有讲到的也是很简略,似乎这是一个神秘的不想让人知道的东西。这里将自己对PAUSE帧的一些研究,对于太术语的方面,直接参考网上资料,不在这里提及。原创 2015-04-11 20:10:02 · 20018 阅读 · 5 评论 -
PHY驱动:代码注解
本文对通用PHY的主要函数进行注解。原创 2015-04-20 19:51:39 · 2447 阅读 · 1 评论 -
Linux移植随笔:git的使用
昨天搞了一天的yaffs2文件系统挂载,结果还是挂载不上去。收获之一是知道如何使用git下载源代码。原创 2011-03-18 08:42:00 · 1652 阅读 · 1 评论 -
Linux移植随笔:又遇困难
Linux移植随笔:又遇困难原创 2011-04-11 10:16:00 · 2471 阅读 · 3 评论 -
Linu移植随笔:由ts_config:Success想到的
背景:其时正在搞qtopia-2.2.0,结果花费大量时间却收获甚少。本文只是以Tslib为背景介绍一下一些程序的出错处理。不涉及具体的移植、操作等等。Tslib校准的测试如下:# ./ts_calibrate Norawmodulesloaded.ts_config:Success这个“错误”信息来自./tests/ts_calibrate.c文件第215行(注...原创 2011-04-12 14:03:00 · 1387 阅读 · 0 评论 -
Linux移植随笔:终于解决Tslib的问题了
Linux移植随笔:终于解决Tslib的问题了原创 2011-04-13 10:47:00 · 5673 阅读 · 7 评论 -
使用Tslib在触摸屏上显示汉字
终于到了在触摸屏上显示汉字了,真正写代码、测试的时间是1天,在此之前的一切准备、学习花费约2周到3周时间。而为了获取触摸屏上显示的图像,花费约2天。由于网络驱动已经接近于放弃状态,NFS用不了,只好用U盘来回复制(即使没有耐心也必须有耐心了)。明明在内核中选择了支持NTFS格式的读写,但却不能将开发板上的文件复制到U盘,而用另一个FAT32格式的另一牌子的U盘,开发板死活认不出来,网上的资料说要修原创 2011-06-03 15:13:00 · 1375 阅读 · 0 评论 -
Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析
本文是作者对tslib库的ts_test.c文件进行分析的随笔,其实tslib的几个测试程序结构差不多,譬如ts_print.c和ts_print_raw.c等。本文并没有涉及太多概念,也没有详细介绍这些概念,但并不代表作者对此不了解,也不代表作者对此很精通。如文中提到的input,虽只出现一个单词,但是相信许多人都知道它在文中指的是Linux操作系统下的input子系统,该子系统不简单,看三...原创 2011-04-25 11:17:00 · 2760 阅读 · 0 评论 -
多目录多源文件的驱动Makefile模板
多目录多源文件的驱动Makefile模板原创 2011-04-30 13:05:00 · 1223 阅读 · 0 评论 -
一个简单字符型设备驱动及其测试
一个简单字符型设备驱动及其测试原创 2011-05-06 16:36:00 · 1099 阅读 · 0 评论 -
s3c2410多通道adc驱动及测试程序
s3c2410多通道adc驱动及测试程序原创 2011-05-07 18:46:00 · 2094 阅读 · 10 评论 -
我的内核学习笔记4:sysfs学习
写这篇文章起因缘于自己的无知。那个很牛的同事还未离职前,我们组被领导挖了个坑,四个不知天高地厚的小伙伴傻傻地接受了——去抄人家的板子,做一个项目,说让我们组挑大梁。回想起来,真是一把辛酸泪。自从使用了那个同事移植的内核后,发现内核十分强大,许多驱动已经集成了——原谅我的无知,最近的两年时间里,完全没接触过内核,只是跟内核提供的接口打交道,我只知道使用open、ioctl、close,其它就原创 2013-11-25 21:38:40 · 1425 阅读 · 0 评论 -
我的内核学习笔记2:platform设备模型
说实话,我做这个例子之前,我对linux的platform设备、platform驱动了解不多,只知道有这些东西,但没概念。上网搜索了一些资料,并下了点功夫跟踪了内核源代码,虽然不能说吃透了原理,但也不至于像以前那样一无所知。这篇文章主要是说一下实现了一个简单的驱动例子。为了明确层次,不把所有代码都放到一个文件中,这个例子中,分别有设备文件simplechar_dev.c,驱动文件simplec原创 2013-11-23 17:17:17 · 1376 阅读 · 0 评论 -
我的内核学习笔记3:我的platform驱动模板文件
前面的例子已经实现platform驱动了,可以将之前的字符设备驱动整合到这个驱动中,实际上我也做了这一步。因为没有什么技术含量,所以忽视它的存在(就不发表出来)。这篇文章是将实现好的基于platform模型的字符设备驱动简化成一个可用的模板。即如要实现字符设备,可直接套用此模板。 /** * @file foo_drv.c * @author Late Lee * @date原创 2013-11-23 17:31:27 · 1236 阅读 · 0 评论 -
我的内核学习笔记:环境
最近一篇写的关于linux内核的文章是2年前,这次因为某些原因,不得不再接触内核。2年过去了,激情不再,看着满是灰尘的2440开发板,不禁感慨当年奋斗的时光。这次学习,纯粹是不得已而为之,深入想一想,除了事情本身外,自己还是能学到东西的。作为日后的一个资本,也是不错了。鉴于环境限制,只能在虚拟机上进行模拟测试。我有一个原则,自己学习的东西(不是工作)绝不占用公司资源——公司有现成的arm嵌入式设备原创 2013-11-18 22:04:08 · 1454 阅读 · 0 评论 -
我的内核学习笔记1:字符设备完善
将以前实现的字符设备改进一点点,添加了ioctl,但没有seek功能,也没有自动创建设备文件功能。/*************************************************************************简单的字符型设备驱动从应用层获取一数据,再复制到应用层(在前面添加字符串)。注册设备号及设备号的几个宏,均系ldd3例子scull。2011原创 2013-11-23 17:03:21 · 1254 阅读 · 0 评论 -
看门狗超时前在内核打印信息
前不久,有几台设备一直在无故复位,虽然我很怀疑是应用程序搞死设备的,但公司的1、原创 2014-05-20 13:21:24 · 1628 阅读 · 2 评论 -
记一次由PCI BAR配置不正确引发的硬盘IO调度io_schedule阻塞的经历
五一前,接到一个bug,大意是说设备接固态硬盘时跑新内核会出现卡死导致WDT复位,使用旧内核没问题。新内核是去年年底别人编译的,旧内核是3年前现在已离职2年的人编译的,现在安排我解决这个问题。但其时正在进行其他部门的紧急测试任务,于是请求节后解决。我最近的计划是学习以太网驱动,而五一没什么计划就去看了,本来想研究SCSI的,但先等查问题后再说吧。原创 2015-05-08 13:05:36 · 2756 阅读 · 0 评论