linux内核编译心得.doc

上传人:pu****.1 文档编号:558936320 上传时间:2023-03-30 格式:DOC 页数:4 大小:34KB
返回 下载 相关 举报
linux内核编译心得.doc_第1页
第1页 / 共4页
linux内核编译心得.doc_第2页
第2页 / 共4页
linux内核编译心得.doc_第3页
第3页 / 共4页
linux内核编译心得.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《linux内核编译心得.doc》由会员分享,可在线阅读,更多相关《linux内核编译心得.doc(4页珍藏版)》请在金锄头文库上搜索。

1、linux内核编译心得2008-10-17 15:06经过2周多的时间,一次又一次的对内核动刀,并反反复复的编译内核。终于我成了熟练工。对于内核的编译,我也有了一些自己的心得。内核编译是痛苦的,不可预料的困难是很多的。但是我都绕过或者解决了。我将这些经验分享给大家,希望能有帮助。内核编译第一步,先安装内核编译的必要工具(需要说明的是我使用Linux的是Ubuntu): apt-get install build-essential(安装 gcc, make 等) apt-get install libncurses5-dev(安装 make menuconfig 时必须的库文件) apt-ge

2、t install kernel-package, fakeroot(Debian 系统里生成 kernel-image 的一些配置文件和工具)kernel-package可能会出现安装不上的问题,E:无效操作 kernel-package但是我用aptitude search kernel后发现有这个安装包,然后将安装包的包名用复制的方式填入命令行,这样就可以安装了。apt-get install apt-get install initramfs-tools, module-init-tools (initramfs-tools好像是2.6.17内核以上版本用的,以下的版本用initrd)

3、如果不安装build-essential,就会在make menuconfig时出现error: sys/types.h: No such file or directory等错误。如果不安装libncurses,就会出现error:curses.h: No such file or directory错误。当初我遇到这个错误时,使用这个aptitude install libncurses5-dev命令,却找不到安装包。郁闷的重新设置了源,仍然找不到,无奈之下,只好手动自己安装了。先下载一个ncurses-5.6.tar.gz,地址是http:/ftp.gnu.org/pub/gnu/ncu

4、rses/ncurses-5.6.tar.gztar zxvf ncurses-5.6.tar.gzcd ncurses-5.6./configure prefix=/usr with-shared without-debugmakemake install clean 然后再运行make menuconfig就好了,呵呵。实际上,后来我才发现为什么会找不到这个安装包,居然是因为我的软件源设置的有问题。配置安装源只需要将好的sources.list复制到/etc/apt下。然后aptitude update即可实现安装源的更新。然后再次去查找这些软件包,就能找到了。内核编译第二步,从网上下载新

5、的内核源码,并解压缩。比如,将linux-2.6.24.tar.gz复制到/usr/src中tar xzvf linux-2.6.24.tar.gz建立一个lnln -s linux-2.6.24 linuxcd linuxmake mrproper为编译做准备。内核编译第三步,make menuconfig来配置。这是内核编译是否成功的关键,很容易配置不好,导致无法从新内核启动。常见的错误有Could not open /lib/modules/2.6.22.14/modules.dep.temp for writing。或者然后就在waiting file system处死机。这些我们先按

6、下不谈。先说说配置中需要注意什么。选择处理器Processor type and features-Processor family-386Ram Disk驱动(在devices driver里)Block devices- RAM disk support(4096) Default RAM disk size (NEW) Initial RAM disk (initrd) support文件系统File systems- * Ext3 journalling file system support * Ext3 Security Labels * JBD (ext3) debugging

7、supportBusLogic驱动(devices driver-scsi device support里)SCSI support-SCSI low-level drivers -BusLogic SCSI support另外,(Device drivers-ATA/ATAPI/MEM/RLL support中)Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选Y,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。SCSI device support 如果有SATA硬盘

8、,就选YSCSI disk support 如果你的/boot放在SATA硬盘上,一定要选Y。 PS:最主要的就是file system和device中的选择了,如果你不想麻烦,就大部分都选上吧。ext2和ext3的都要选上。scsi和SATA,IDE的也都选上。内核编译第四步,漫长的编译过程。makemake installmake modulesmake modules_installmkdir /lib/firmwar/2.6.24 (这一步是需要的,因为如果没有这个,下一步mkinitramfs就会出错,说找不到这个目录。)/usr/src/linux# /usr/sbin/mkini

9、tramfs -o /boot/initrd.img-2.6.24 2.6.24大概整个编译过程需要持续40分钟到1个半小时不等。内核编译第五步,修改menu.lst。gedit /boot/grub/menu.lst复制原来的,只改一下title。root不改。kernel改一下/boot/vmlinuz-2.6.24即可,root不动,后面的ro加上,但是把quiet删了,如果加上这个,就不显示启动过程了。initrd改动为/boot/initrd.img-2.6.24即可。内核编译第六步,reboot。如果你编译成功了,那么祝贺你,你太幸运了,一下就编译成功了。编译不成功才是正常的,呵呵

10、。我说说我遇到的问题,并如何解决的吧。最开始是这个错误:Could not open /lib/modules/2.6.22.14/modules.dep.temp for writing后来在waiting file system处死机。后来感觉menu.lst中的root=/dev/sda1才对。我在grub中用“E”编辑启动,反复试验,发现VMware确实是应该是sda1,因为原来可以启动的选项,我这样改是可以进入的。但是我新编译的内核却仍然不行,恍然大悟,很可能是新编译的内核没有选中SCSI设备。再次重新选择,并编译,还是老错误。然后就莫名的死机了,但是比刚才的结果又前进了一步。在困扰

11、了我一天之后,我决定将虚拟机模拟出IDE硬盘,再重新编译内核。选择custom创建虚拟机,new machine5.选择IDE硬盘。最后成功了。呵呵。但是在我对老版本内核进行编译时,又有了新问题。编译2.6.16内核时遇到一个小问题,make出现undefined reference to _stack_chk_fail错误。我百度了一下,修改了Makefile文件,问题得以解决。it seems that CFLAG -fstack-protector is add by default to our CFLAGS in edgy preventing some kernel to be b

12、uild.i manually edit the Makefile and add after the line:CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-commonto:CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestanding -fno-strict-aliasing -fno-common -fno-stac

13、k-protectorCFLAGS += $(call cc-option, -fno-stack-protector-all -fno-stack-protector)后来还是没有过,可能是因为gcc版本过高的原因,现在Ubuntu7.1默认的是4.1版本,我将它降为3.3.6版本了。降的方法就是,aptitude search gccaptitude install gcc-3.6然后进入/usr/bin下ln -s gcc-3.3 gcc最后输入gcc -version查看,发现gcc的版本已经倒回去了。呵呵。而且老版本里要用mkinitrd而不是mkinitramfs。郁闷的是,不知道

14、是什么原因,这个版本的编译总是不顺利。后来我放弃了2.6.16内核,采用了2.6.18的内核,并没有出现这些问题,一次就通过了。呵呵。最后是一些Ubuntu下偶尔出现的问题。/无法获取权限。$ su - rootPassword:su: Authentication failureSorry.这时候输入$ sudo passwd rootEnter new UNIX password:Retype new UNIX password:passwd: password updated successfully这时候就可以进入根目录了。然后我在鹦鹉螺中输入smb:/192.168.5.130就可以访问局域网上的服务器的共享文件夹了。将sources.list复制到/etc/apt下。然后aptitude update即可实现安装源的更新。然后就可以很顺利的apt了,呵呵。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号