嵌入式学习笔记(二)——初识驱动开发
来源:互联网 发布:linux批量删除命令 编辑:程序博客网 时间:2024/05/16 01:24
前边粗略了解了下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》,研究研究众多英文单词怎么破
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 嵌入式学习笔记(二)——初识驱动开发
- 嵌入式学习笔记(一)——初识NAND FLASH
- Linux驱动开发——学习笔记(二)
- 嵌入式Linux设备驱动开发笔记(二)
- 嵌入式Linux驱动开发(二)——字符设备驱动之控制LED
- capwap学习笔记——初识capwap(二)
- capwap学习笔记——初识capwap(二)
- capwap学习笔记——初识capwap(二)
- capwap学习笔记——初识capwap(二)
- capwap学习笔记——初识capwap(二)
- OneNet学习笔记(二)——OneNet平台初识
- 嵌入式Linux设备驱动开发(二)
- 初学嵌入式Linux开发,学习笔记二
- 嵌入式开发技术:wince驱动开发学习笔记
- 【嵌入式Linux驱动开发】三、字符设备驱动(二)
- 嵌入式学习笔记——字符设备驱动编写
- 测试驱动开发笔记(二)——xUnit
- Linux驱动学习--初识PCI驱动(二)
- 【zz】ALSA在ARM(S3C6410)中的移植
- 工作流引擎网站资料收集
- WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- ASIHTTPRequest 详解
- [php]领域模型和数据映射器
- 嵌入式学习笔记(二)——初识驱动开发
- WF中的跟踪服务(2):使用SqlTrackingService
- Oracle10g 回收站及彻底删除table : drop table xx purge
- WF中的跟踪服务(3):使用SqlTrackingService跟踪规则
- Hashtable和HashMap区别
- 链队列基本运算(实验题3.4)
- WF中的跟踪服务(4):使用跟踪配置文件
- 音频实际开发1
- UITabBarController详解