




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux内核裁减及根文件系统定制目录: 一、内核编译二、根文件系统定制三、内核选项说明一、内核编译1、 准备工作(1) 整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。(2)建议用命令uname r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。(3)下载并解压linux内核。以下假设你已经下载了内核的为linux-x-y-z.tar.gz。一般都将linux内核源代码放在/usr/src下,这里仍然遵守这个习惯,如果你的这个路径下已经存在这个版本的内核,建议将已有的改个名称。2、 开始编译(1) make mrproper确保源代码目录下没有不正确的.o文件和文件依赖关系,执行该命令后,内核选项会回到默认的状态下。如果你是下载的内核源码,而且是第一次编译,就没有必要执行这一步操作(2) make menuconfig以文本菜单方式选择内核选项(与它功能相同的命令还有make config;make xconfig;make oldconfig),不同版本的内核,选项可能会有一些差异。注:#make config(基于文本的最为传统的配置界面,不推荐使用) #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) #make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令。这一步是内核编译的关键,根据需要支持的硬件、文件系统和协议等内容,选择不同的选项。配置选项时,有三种选择方式,它们代表的含义如下: Y将该功能编译进内核 N不添加功能 M将该功能编译成模块,在需要时动态加载到内核选择的原则:是与内核关心紧密而且经常使用的部分功能代码直接编译到内核中;将与内核系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选。 我们使用空格键进行选取。根据选项的不同,按下空格键的结果也有所不同:选项后有”符号的,进入下一级菜单;选项前有中括号的,则在空和*之间切换;选项前有尖括号的,在空、*和M之间切换;选项前有圆括号的,需要在所提供的几个选项中选择一项,或者需要输入数值等符号。咦,什么?要我详细介绍具体该怎么选择这些选项?大汗!这可是个大问题,需要根据不同的需求进行选择,比如需要支持USB键盘、鼠标或/和存储器,支持多CPU,支持网卡,串口,支持TCP协议,ext2文件系统,nfs文件系统等等。后面我将就内核选项做详细的介绍。(在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。)(3) make dep根据上一步所选择的选项,建立文件的依赖关系。(4) make clean清理一些不必要的文件,如果你在上次编译的基础上,删去了一些选项,建议你执行这一步操作,否则,就没有必要了。(5) make bzImage生成内核压缩文件。如果你确认你的内核在640K以下,你可以用make zImage来代替 make bzImage。这一步相当费时,你可以在命令后加上&,让其在后台执行,或者重定向到/dev/null中,这样你就什么也看不见屏幕上闪过不停的字符啦。编译出的内核在 ./arch/i386/boot/ 下,文件名为bzImage(6) copy /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-x.y.z(7) make modules编译可加载模块(即内核选项中选择为M的选项),编译时间跟M选项的数量有关。(8) make modules_inatall将编译好的modules拷贝到/lib/modules下,这就是为什么在“准备工作”的第三步提醒你备份的原因了。(9) cp /usr/src/linux/System.map /boot/ System-x.y.z.map3、 修改启动配置文件现在大多数使用的都是grub启动,需要修改/boot/grub/grub.conf,添加相应的启动信息,添加内容的最简单格式如下:title 显示在启动菜单上的名称root 根文件系统挂载分区kernel 压缩过的内核文件名initrd 根文件系统文件名如:title My new kernelroot (hd0,2)kernel /boot/vmlinuz-x.y.zinitrd /boot/initrd-x.y.z.img Linux内核裁减及根文件系统定制(之二)-根文件系统定制二、根文件系统定制 1、 创建一个全新的根文件系统 你可以用mkinitrd来创建,这里介绍另外一种方式,用dd命令: # mkdir -p /mnt/initrd 创建一个设备点,用于临时挂载根文件系统。 # cd /tmp 在tmp下创建根文件系统 # dd if=/dev/zero of=/tmp/initrd bs=512 count=40960 创建一个名为initrd的根文件系统,系统每个块的大小为512字节,共40960块。 # mke2fs -F -m 0 initrd 格式化根文件系统,其中-F表示强制执行;-m 0表示不为系统预留空间。 # mount -o loop /tmp/initrd /mnt/initrd 挂载根文件系统,记住这里要使用-o loop选项,否则挂载会失败。 # cd /mnt/initrd 2、 创建基本的目录结构 # mkdir dev proc etc etc/rc.d sbin bin lib mnt tmp var usr # chmod 755 dev etc etc/rc.d sbin bin lib mnt tmp var usr # chmod 555 proc 3、 添加设备 你可以使用mknod创建,也可以从现有的系统中拷贝过来,拷贝的时候一定要注意,最好使用-dfR,这样有两个好处:1、拷贝路径下的所有文件,如果有文件夹,则嵌套拷贝整个文件夹下的内容;2、保持文件(设备)的属性不变。 这里采用mknod创建的方式,以下设备是必须的console、kmem、mem、null、ram0、tty等。建立一般终端机设备 # mknod tty c 5 0 # mkdir console c 5 1 # chmod 666 tty console 建立 VGA Display 虚拟终端机设备 # mknod tty1 c 4 0 # chmod 666 tty0建立 RAM disk 设备 # mknod ram0 b 1 0 # chmod 600 ram0 建立 null 设备 # mknod null c 1 3 # chmod 666 null 4、 创建配置文件(有疑问)到这里我们就有了一个初步的小型根文件系统,但是还需要配置一些有关的 shell script来完善它。 在etc下创建最基本的配置文件fstab、inittab、rc.d/rc.sysinit,其中每个配置文件中至少应该包含以下对应的内容: fstab应包括: /proc /proc proc defaults 0 0inittab应包括: sysinit:/etc/rc.d/rc.sysinitsysinit:/bin/sh (注意,这里如果用getty或minigetty代替sh,那么shell就会等待用户登录,而不会直接进入shell。) rc.d/rc.sysinit应包括: /bin/mount a 5、 添加bin、sbin、usr/bin、usr/sbin下的可执行文件 系统至少应该包含工具sh, ls, cp, mv,init。我们可以将/bin /sbin /usr/bin /usr/sbin下的对应工具拷贝过来,拷贝的时候采用cp dfR。系统中的可执行文件一般都比较大,在内存或磁盘空间紧张的情况下不适合,我们可以用BusyBox(需要下载)来解决这个问题。BusyBox 包含了七十多种 Linux 上标准的工具程序,仅需要几百 k 磁盘空间,在嵌入式系统上常用到它。下载了BusyBox的源代码包后可以按照如下的步骤操作: DOSTATIC=true (这个做什么用?如何使用?) 然后修改 BusyBox 中的 init.c,设定系统要执行的第一个程序为: /etc/rc.d/rc.sysinit #define INIT_SRCIPT /etc/rc.d/rc.sysinit开始编译BusyBox #make #make install到这一步我们就得到了可执行命令busybox 将busybox 复制到/mnt/initrd/bin目录下 # cp busybox /mnt/initrd/bin然后创建常用命令的link,具体的工作原理请参阅busybox的官方说明。 我们可以使用 ./busybox -help 来查看busybox中都有哪些工具。常用的工具及busybox的用法如下:# ln -s busybox ls # ln -s busybox cp # ln -s busybox mount # ln -s busybox umount # ln -s busybox more # ln -s busybox ps # ln -s busybox sh 现在我们就有了所需的常用命令。 6、 添加库到lib下 该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函数库,系统会停止启动或出现一大堆错误信息,所以一定要注意。几乎所有的程序都需要libc库,列一下目录/lib中的libc: ls -l /lib/libc*rwxrxrx 1 root root 4016683 Apr 16 18:48 libc2.1.1.so*lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 libc2.1.1.so*(这条命令的意思)libc.so.6的6表示版本号,它指向的文件才是你真正需要的。 查看/bin /sbin /usr/bin /sur/sbin下每一个程序使用的函数库,用命令ldd, 如: ldd /sbin/mke2fs libext2fs.so.2 = /lib/libext2fs.so.2 (0x40014000) libcom_err.so.2 = /lib/libcom_err.so.2 (0x40026000) libuuid.so.1 = /lib/libuuid.so.1 (0x40028000) libc.so.6 = /lib/libc.so.6 (0x4002c000) /lib/ldlinux.so.2 = /lib/ldlinux.so.2 (0x40000000) 输出右边的库都是必须的,有的可能是链接文件。 在/lib目录下你还必须有函数库装载器,这个装载器(需要下载)或是ld.so (对 a.out 库) 或是ld-linux.so (对 ELF 库)。新版本的ldd一般会告诉你所需库的装载器。 7、 加载模块 如果你有一个模块化的内核,你还得考虑需要加载的模块,它们都位于/lib/modules 下cp dfR /lib/modules/x.y.z /mnt/initrd/lib/modules 8、 打包# cd /tmp # umount /mnt/initrd # gzip -9 initrd 最终产生的文件initrd.gz就是压缩过的根文件系统 9、 修改已经存在的根文件系统# gunzip initrd.zip# mount -o loop /tmp/initrd /mnt/initrd# 用户修改根文件系统# umount /mnt/initrd# gzip -9 initrd三、内核选项说明内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的make menuconfig。需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下:首先确定shell是bash;然后$make menuconfig有一些默认的符号其含义如下:y:加载n:不加载m:作为模块加载可以配置的选项有以下一些:1)code maturity level option 代码成熟度prompt for development and/or incomplete code/drivers N/y/?如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。选择N2)processor type and features 处理器类型及特性Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)PPro/6x86MX内的是缺省值,我们可以根据前面介绍的uname 命令执行的结果选择。此项如果高于386,那么生成的内核在386机器上将不能启动。选择缺省值High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。选择NMath emulation(CONFIG_MATH_EMULATION)N/y/?需要进行协处理器模拟吗?一般的机器都回n。如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的math-emulation,这将使内核变大变慢。选择NMTRR(Memory Type Range Register)support(CONFIG_MTRR)N/y/?在Pentium、Pro/Pentium II类的系统中可以提高图像写入速度。选择NSymmetric multi-processing support(CONFIG_SMP)Y/n/?如果您的机器有多个处理器,就选y。此时要选中下面的Enhanced Real Time Clock Support多处理器支持,先不选。选N3)loadable model support 可加载模块支持Enable loadable module support(CONFIG_MODULES)Y/n/?最好选y,不然许多仅供动态加载的模块就不能用了。选择YSet version information on all symbols for modules(CONFIG_MODVERSIONS)N/y/? 选NKernel module loader(CONFIG_KMOD)N/y/? 选择Y4)general setup 一般设置Networking support(CONFIG_NET)Y/n/?选y吧,现在还有几台计算机不用上网呢?选择YPCI support (CONFIG_PCI)Y/n/?PCI 总线和设备总该有吧。选择YPCI access mode(BIOS,Direct,Any)Any缺省值比较保险,但如果您对您的主板很有信心,就选BIOS。选择AnySupport for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 选NPCI quirks (CONFIG_PCI_QUIRKS)Y/n/?用于修补BIOS中对PCI有影响的BUG,同样,如果您对主板很有信心,就选n。选择YBackward-compatible /proc/pci(CONFIG_PCI_OLD_PROC)Y/n/?以前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选y。选择YMCA support(CONFIG_MCA)N/y/?查看帮助吧。选择YSGI Visual Workstation support(CONFIG_VISWS)N/y/?您的机器是SGI的吗?是就选y。(什么是SGI)查资料确定System V IPC(CONFIG_SYSVIPC)Y/n/?进程间通信函数和系统调用。Linux内核的五大组成部分之一,一定要选。选择YBSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)N/y/?用于启动由内核将进程信息写入文件的用户级系统调用。就看您想不想用它了。选择YSysctl support(CONFIG_SYSCTL)Y/n/?在内核正在运行的时候修改内核。用8KB空间换取某种方便。别选吧,除非你真的想试试。选择NKernel support for a.out binaries(CONFIG_BINFMT_AOUT)Y/m/n/?为了能使用以前编译的程序,选y。选N。Kernel support for ELF binaries(CONFIG_BINFMT_ELF)Y/m/n/?为了能使用现在编译的程序,选y。选y。Kernel support for MISC binaries(CONFIG_BINFMT_MISC)Y/m/n/?一般选y,用于支持java等代码的自动执行。选择MParallel port support(CONFIG_PARPORT)N/y/m/?并口设备,如打印机。选择M5)plug and play support 即插即用设备支持Plug and Play support (CONFIG_PNP)N/y/?选y吧。选y6)block devices 块设备Normal PC floppy disk support(CONFIG_BLK_DEV_FD)Y/m/n/?一般的软驱。选y。选yEnhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)Y/m/n/?这几种接口的硬盘、光驱、磁带、软驱。选y。Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)Y/m/n/?CDROM。选y。XT hard disk support: 选NCompaq SMART2 support: 选NMulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。选NLoopback device support: 选择YNetwork block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。选NRAM disk support:RAM盘支持。选择YLogical volume manager(LVM)support:逻辑卷管理支持。选YMultiple devices driver support:多设备驱动支持。选Y7)networking options 网络选项Packet socket (CONFIG_PACHET)Y/m/n/?按照目前网络发展的状况,选y比较好。当然也可以选其它的。选YKernel/User netlink socke(CONFIG_NETLINK)N/y/?内核与用户进程双向通信。选y。选YNetwork firewalls(CONFIG_FIREWALL)N/Y/?如果真的需要用防火墙,就选y。选择NUNIX domain sockets(confgi_unix)Y/m/n/?socket 的用处太多了。选y。选YTCP/IP networking(CONFIG_INET)Y/n/?选y,理由如上一条。选YThe IPX protocol (CONFIG_IPX)N/y/m/?其实并没有那么多人真的需要使用或者学习IPX,所以一般选N。选择NAppletalk DDP(CONFIG_ATALK)N/y/m/?选N,理由同上。选择N8)SCSI support SCSI支持,SCSI low-level drives SCSI低级驱动根据系统中SCSI设备的实际情况选择。选Y9)Networking device support 网络设备支持如果用LAN上网,就选择网卡;如果用MODEM拨号上网,就要看ISP提供那种服务了,一般都是PPP。Ethernet (10 or 100Mbit) -选项下全部选择。10)Amateur Radio support 业余收音机支持这是什么我不太清楚,所以选N。选择N11)ISDN subsystem ISDN子系统好像已经有支持ISDN的MODEM了,所以最好先看看自己的MODEM是不是这种,再做选择。选择M12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驱驱动一般选N,因为这种设备实在很少见。选择N13)Character devices 字符设备Virtual terminal(CONFIG_VT)Y/n/?Linux上一般可以用Alt+F1/F2/F3/F4来切换不同的任务终端,即使在一台计算机上也可以充分使用Linux的多任务能力,一些需要以命令行方式安装合适用的软件如果有虚拟终端的支持就会更方便,因此选y。选择YSupport for console on virtual terminal(CONFIG_VT_CONSOLE)Y/n/?选y将支持一个虚拟终端作为控制台。一般为Alt+F1。选择YSupport for console on serial port(CONFIG_SERIAL)Y/m/n/?除非真的需要一个串口控制台,否则选n。选择YExtended dumb serial driver options(CONFIG_SERIAL_EXTENDED)N/y/?如果希望使用dumb的非标准特性(如HUB6支持),选y,一般选N。选择NNon-standard serial port support(CONFIG_SERIAL_NONSTANDARD)N/y/?非标准串口。一般选N。选择NUNIX98 PTY support(CONFIG_UNIX98_PTYS)Y/n/?PTY指伪终端,一般用户就选n。但如果想用telnet或者xterms作为终端访问主机,并且已经安装了glibc2.1,就可以选y。选择NMaximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)256缺省值就可以了。Mouse Support(not serial mice)(CONFIG_MOUSE)Y/n/?PS/2等非串口鼠标选y,否则选N。选择N14)Mice 鼠标根据自己的鼠标类型选择。15)Video for Linux Linux视频根据系统中的音/视频捕捉设备选择。16)Joystick support 操纵杆根据系统中的游戏杆设备选择选择N17)Ftape,the floopy tape device driver Ftape设备驱动Ftape (QIC-80/Travan)support(CONFIG_FTAPE)N/y/m/?如果系统中有磁带机,选y。选择N18)Filesystems 文件系统文件系统的选择要比较仔细,因为其中的一些给某些系统功能提供支持。而且除了proc、ext2等文件系统之外,其它的文件系统(包括下面的网络文件系统)都可以选择为m方式,从而减小内核启动时的体积。Quota support(CONFIG_QUOTA)N/y/?用于给用户划分定量的磁盘空间。如不用此功能就选N。选择YDOS FAT fs support(CONFIG_FAT_FS)N/y/m/?为内核提供FAT支持,多数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业生产中的农药使用与安全
- 医院基础设施建设技术规范指南
- 匈牙利算法在最大二分图匹配中的步骤指南
- 美容院转让合同及注意事项合集
- 企业营销宣传资料制作标准模板
- 产品研发流程标准化手册品质控制版
- 客户服务响应流程与问题解决模板
- 农业生产基地基础设施建设合作协议
- 公司研发工程师劳动协议
- 护理学副高考试题库内科及答案解析
- 2025至2030中国玄武岩纤维行业发展趋势分析与未来投资战略咨询研究报告
- 作业托管学生管理制度
- 《机械制图》机械工业出版社 第一章 制图基本知识与技能 章节过关卷(原卷版)
- 公安接警面试题及答案
- 动力电池回收网络设计-洞察及研究
- 中国心血管病一级预防指南解读
- 贝壳融合训acn试题及答案
- 鸿蒙试题及答案
- 2025合肥市辅警考试试卷真题
- 贷款转移协议书
- 企业资金流动管理的试题及答案
评论
0/150
提交评论