前边粗略了解了下NAND FLASH,但是那些知识根本不够展开工作,现在开始学驱动开发。
照例,先百科:
参考书:
《Linux设备驱动开发详解》
百科ref:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Linux设备驱动的重点、难点
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
发现除了熟练C(最近还没练),Linux内核才开始接触,差距很大。
先搜帖子学吧:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
“Linux操作系统内核编译详解”
Linux开源,所有内核源程序都在/usr/src/linux下。大部分遵循GPL。
版本:提到Linux大家都知道无数个版本,每个人都可以开发出来,各种各种。那么应对这种集市模型开发(bazaar,相对的有cathedral教堂模型),确保无需开发过程有序进行,Linux采用了双树系统,稳定树(stable tree)和非稳定树(unstable tree)(或者叫开发树(development tree)。很简单,后者用于各种改进尝试,合适的话两者同时改进,完成后开发树变成稳定树。具体的版本号形式x.y.z,稳定树y是偶数,开发树比稳定树大一(奇数)。“到目前为止”,稳定树最高版本2.2.16(够老的),Redhat7.0用的2.2.16内核,开发树最新版本2.3.99.网上诸如2.4.0-test9-pre7之类的不是正式版本。
为此我去截了个图,不用我们太麻烦去分辨,人家都提示了哪个是stable。
说到为什么重新编译内核,因为linux内核不断更新(例如更多的硬件支持,更好的进程管理,更快的速度和更好的稳定性),用户想利用新内核,或者定制自己需要的高效稳定的内核,就需要重新编译内核。
一般有四个特性:
运行更快(内核精简啊,代码少);
内存更多(内核部分将不会被提交到虚拟内存中——何解?);
更安全(少了多余的功能,漏洞也少);
将某种功能编译为模块方式会比编译到内核内的方式速度更慢一些(什么考量?)。
内核编译模式:
要增加某种支持,比如网络,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。前者开机启动,速度快,缺点是内核庞大,冗余,整体速度也会慢——window惯用无脑招数。反之肯定是另一个极端,所以,计算机中常用的理念就是取得平衡,达到中庸,英语里应该叫economy,经济。
所以特别有用、频率高的build-in,其他的编译成.o文件,使用的时候动态加载,这样做的缺点就是需要自己调用。
新版本获取和更新:
下载完整内核版本,或者补丁(patch)文件,前者大后者小。
下边有个流程,我先照猫画虎手打一下加点印象(具体可行性不可知,我先熟悉熟悉再做这个事):
首先需要root用户,然后把要升级的内核拷贝到/usr/src/下
#cp linux-2.4.0test8.tar.gz
当前/usr/src里有一个linux的符号链接(我反正没找到),指向一个类似于linux-2.2.14(你现在版本)的目录,删除这个链接:
#cd /usr/src
#rm -f linux
现在解压下载的源程序(网速不好的可以先下俩预备着)
#tar -xzvf linux-2.4.0test8.tar.gz
如果是bz2文件
#bzip2 -d linux-2.4.0test8.tar.bz2
#tar -xvf linux.2.4.0.test8.tar
据说此时/usr/src下有了一个linux目录,前边那个名为linux的链接就是防止升级内核的时候不慎把原来版本内核源程序覆盖掉。
#mv linux linux-2.4.0test8
#ln -s linux-2.4.0test8 linux
这样也制作了一个防覆盖的linux符号(目前我对系统的了解只能是不明觉厉,怎么个防覆盖,link我不熟,我只停留在快捷方式上,至少在我的ubuntu上文件布局和这里说的不一样,/usr/src下不是linux,而是各linux版本号:
h@kk:/usr/src$ ls
linux-headers-2.6.38-10 linux-headers-2.6.38-8
linux-headers-2.6.38-10-generic linux-headers-2.6.38-8-generic
)
如果你还下载了patch,比如patch-2.4.0test8,并且位于/usr/src目录下
#patch -p0 < patch-2.4.0test8
这就算升级完了。
下边是内核编译,blabla,命令太多了,一眼扫不懂,有点超出我知识范围了,或者照猫画虎太多也受不了。先研究研究再搞。
土逼continue
ios7真但疼,我都看不到我浏览的网页地址,总不能就是it.com.cn吧,我靠还得点开地址栏,闹惨的设定
www.it.com.cn/f/edu/0411/30/53807.htm
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下边回到我的课程上,再扫几眼《Understanding the Linux Kernel》,研究研究众多英文单词怎么破
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------