刚看 O'REILLY 写的《LINUX 设备驱动程序》时。作者一再强调在编写驱动程序时必须 建立内核树。所谓内核树,我的理解和网上资料说的一致就是内核源码的一种逻辑形式。那怎么建立呢?为此上网“翻云覆雨”起来而结果却是“惨败而归“。
为此托了一天又4个小时(当然包括吃饭睡觉的时间),连个简单的 hello wrold 都没实现。(书中p22页最简单也最没用的驱动事列)
不过功夫不负有心人。在今天终于弄明白了怎么回事。下面就请让我慢慢道来吧。
先查看自己OS使用的内核版本
shana@shana:~$ uname -r
2.6.22-14-generic /* 这是我显示的结果 */
如果安装系统时,自动安装了源码。在 /usr/src 目录下有对应的使用的版本目录。例如下(我是自己下的)
shana@shana:/usr/src$ ls
linux-headers-2.6.22-14
linux-headers-2.6.22-14-generic
linux-source-2.6.22 /*这个就是解压后的源码目录 */
linux-source-2.6.22.tar.bz2 /* 这是我下的源码 包 */
shana@shana:/usr/src$
如果没有源码。(一般ubuntu 都没有吧)
查看一下可一下载的源码包(切记不要使用超级用户使用此命令否则……会提示没有此命令)
shana@shana:/usr/src$ apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
xen-source-2.6.16 - Linux kernel source for version 2.6.17 with Ubuntu patches
linux-source-2.6.22 - Linux kernel source for version 2.6.22 with Ubuntu patches
shana@shana:/usr/src$
我选择了 linux-source-2.6.22 - Linux kernel source for version 2.6.22 with Ubuntu patches 这个~
然后 install 之
shana@shana:/usr/src$ sudo apt-get install linux-source-2.6.22
下载完成后,在/usr/src下,文件名为:linux-source-2.6.22.tar.bz2,是一个压缩包,解压缩既可以得到整个内核的源代码:
注意 已经切换到超级用户模式
root@shana:/usr/src#tar jxvf linux-source-2.6.20.tar.bz2
解压后生成一个新的目录/usr/src/linux-source-2.6.22,所有的源代码都在该目录下。
进入该目录
开始配置内核 选择最快的原版的配置(默认)方式 (我是如此)
root@shana:/usr/src/linux-source-2.6.22# make oldconfig
当然你也可以使用 自己喜欢的配置方式 如 menuconfig , xconfig(必须有GTK环境吧)。反正不用剪裁什么,所以不管那种方式能配置它就行了。
完成后,开始make 吧 这儿比较久 一般有1一个小时吧。(保证空间足够 我编译完成后 使用了1.8G) 我分区时分给/目录30G的空间,我没遇到这问题。倒是我朋友遇到了。
shana@shana:/usr/src/linux-source-2.6.22$ make
shana@shana:/usr/src/linux-source-2.6.22$ make bzImage
当然,第一个make也可以不执行,直接make bzImage。执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。
然后 :
root@shana:/usr/src/linux-source-2.6.22#make modules /* 编译 模块 */
root@shana:/usr/src/linux-source-2.6.22#make modules_install /* 安装 模块 */
执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2.6.22-14-generic/
。 在随后的编译模块文件时,要用到这个路径下的build目录。至此,内核编译完成。 可以重启一下系统。
至此 内核树就建立啦 原来不是很难.....
期间内核源码我是到www.kernel.org上下的2.6.38版本的,其他操作都是按照上面一步步来的,ubuntu系统是2.6.35版本的。
可是重启后,我的ubuntu系统启动不了了,选择操作系统之后画面就停止,没反应了,没任何提示。
5 个解决方案
#1
#2
是不是出现了两个进入系统的选择啊?
如果是应该是引导出错。你可以在选择操作系统那时,看看下面有什么提示,好像是输入“E”,进入编译状态吧,然后改正引导。
改正引导其实也很简单,也就是把2.6.35改成2.6.38什么的,具体我不是很记得了,网上找找吧。祝你好运
如果是应该是引导出错。你可以在选择操作系统那时,看看下面有什么提示,好像是输入“E”,进入编译状态吧,然后改正引导。
改正引导其实也很简单,也就是把2.6.35改成2.6.38什么的,具体我不是很记得了,网上找找吧。祝你好运
#3
搞驱动要有耐心,别人很难告诉你问题的所在,一般需要自己慢慢的调试。
#4
搞驱动要小心,弄不好就进不了系统:)
#5
还在学习中,没有发言权~
#1
#2
是不是出现了两个进入系统的选择啊?
如果是应该是引导出错。你可以在选择操作系统那时,看看下面有什么提示,好像是输入“E”,进入编译状态吧,然后改正引导。
改正引导其实也很简单,也就是把2.6.35改成2.6.38什么的,具体我不是很记得了,网上找找吧。祝你好运
如果是应该是引导出错。你可以在选择操作系统那时,看看下面有什么提示,好像是输入“E”,进入编译状态吧,然后改正引导。
改正引导其实也很简单,也就是把2.6.35改成2.6.38什么的,具体我不是很记得了,网上找找吧。祝你好运
#3
搞驱动要有耐心,别人很难告诉你问题的所在,一般需要自己慢慢的调试。
#4
搞驱动要小心,弄不好就进不了系统:)
#5
还在学习中,没有发言权~