嵌入式开发教程之自己定制软盘上的Linux系统方案课件



《嵌入式开发教程之自己定制软盘上的Linux系统方案课件》由会员分享,可在线阅读,更多相关《嵌入式开发教程之自己定制软盘上的Linux系统方案课件(24页珍藏版)》请在装配图网上搜索。
1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,嵌入式开发教程之自己定制软盘上的,Linux,系统方案,引言,一,.,前言,二,.Linux,启动过程,三,.,定制,Grub,引导程序,四,.,定制,Linux,内核,五,.,制定,initrd,六,.,定制根文件系统,七,.,其他方法,八,.,前景,嵌入式,Lin
2、ux,是由一个几百,KB,的,Linux,内核和一个根据需要制定的文件系统所构成了,由于,Linux,是开放源代码的操作系统,所以在嵌入式领域有着非常广阔的前景,并已经广泛应用在许多手机、,PDA,、,MP3,播放器等许多电子产品中。,本文将介绍一种两张软盘上的,Linux,系统,它可以当作系统应急修复盘、路由器或防火墙等许多地方,通过对它的研究,也可以加深对嵌入式系统的理解。,引言,嵌入式,Linux,是由一个几百,KB,的,Linux,内核和一个根据需要制定的文件系统所构成了,由于,Linux,是开放源代码的操作系统,所以在嵌入式领域有着非常广阔的前景,并已经广泛应用在许多手机、,PDA,
3、、,MP3,播放器等许多电子产品中。本文将介绍一种两张软盘上的,Linux,系统,它可以当作系统应急修复盘、路由器或防火墙等许多地方,通过对它的研究,也可以加深对嵌入式系统的理解。,一,.,前言,所有的,PC,机在加电之后,,BIOS,会寻找到启动盘第一个扇区,并将其复制到,RAM,中来执行它,对于两种不同的启动方式,这个扇区通常含有两种不同的代码:引导程序,(,比如,Lilo,或,Grub,等,),的代码,引导程序会帮助定位内核的位置。内核的代码,这通常是从软盘启动时使用的引导的方式。对于前者,通常需要内核支持,initrd,。如果是后者,使用的,Boot Loader,就是,arch/i3
4、86/boot/bootsect.S,。当内核被编译的时候,这段执行代码就被链接到内核,image,的最开始的地方。这样很容易就能只要把内核复制到起始位置为第一个扇区的软盘上就能得到可自启动的软盘。内核会初始化设备驱动和内部的数据结构,之后它会到一个特定的位置,Ramdisk Word,来获得根文件系统的位置。内核必须知道去那里寻找这个根文件系统,否则它将停机。,二,.,嵌入式开发教程,:,Linux,启动过程,在使用软盘启动的方式时,内核可以把一个压缩的文件系统释放到,RAM,中,称之为,Ramdisk,,这是一个内存区域,但内核会把它当作磁盘一样使用。,本文中介绍的例子使用,Grub,做为
5、引导程序,并使用,initrd,来辅助,Linux,的启动。两张软盘分别命名为,bootldr,盘和,rootfs,盘,在,bootldr,盘中内容为,grub,、内核、,initrd,,,rootfs,盘中是压缩过的根文件系统。系统启动时,bootldr,盘的,Grub,定位并执行内核,然后内核解开,initrd,,并执行,linuxrc,文件,这个文件负责提示用户更换,rootfs,盘并将其中内容解压至内存中,然后执行刚刚解压的,init,继续启动过程。,嵌入式开发教程,插入一张软盘,然后将其格式化,然后加载到,/mnt/floppy,#mke2fs/dev/fd0,#mount-t ex
6、t2/dev/fd0/mnt/floppy-o loop,在其中创建,/boot/grub,目录,#mkdir-p/mnt/floppy/boot/grub,将系统中,/boot/grub,下的,device.map,stage1,stage2,复制到,/mnt/floppy/boot/grub,中,然后在,/mnt/floppy/boot/grub,目录下创建,grub.conf,文件:,default=0,timeout=10,title Floppy Linux,kernel(fd0)/bzImage root=/dev/ram0,initrd(fd0)/initrd.gz,三,.,嵌入
7、式开发教程,:,定制,Grub,引导程序,然后创建一个链接,#ln-s grub.conf menu.lst,执行,/sbin/grub-batch-device-map=/dev/null /dev/null,echo ,将第二章软盘上的内容解压到,sysroot,目录,(,内存,),中。,echo Loading root-archive from floppy.,dd if=/dev/fd0 bs=1k|bzip2-d|cpio-idv,嵌入式开发教程,下面将,initrd,中的文件,copy,到,sysroot/bin,目录下,这样可以把根文件系统中一部分内容放到,initrd(,第一
8、张软盘,),中,因为软盘容量有限,当第一张软盘空间有剩余,而第二章软盘空间紧张的时候这会非常有用。,echo Copying:,for file in bzip2 chroot cp cpio echo readkey;do,echo-en ;echo-n$file,cp/bin/$file./bin/$file,done,下面将,/,目录设定为当前目录,即,sysroot,,并执行刚刚从,rootfs,盘中解压出来的,init,。,嵌入式开发教程,echo ,echo Pivoting/.,pivot_root.mnt/initrd,echo Starting init process.,e
9、xec chroot./sbin/init/dev/console 2&1,echo-enSomething went wrong.,/bin/sh|/mnt/initrd/bin/sh,当,initrd,所有必须的文件都放到,bootldr/initrd/local,目录下之后,就可以执行,bootldr/initrd/mkinitrd.sh,来创建,initrd,镜像文件。,mkinitrd.sh,的内容为:,#!/bin/sh,mount-t ext2/dev/fd0/mnt/floppy,rm-f/mnt/floppy/initrd.gz,rm-f initrd.gz,取,4M,大小的
10、内存块格式化为,ext2,格式,并将其,mount,到,bootldr/initrd/ramdisk,上。,dd if=/dev/zero of=/dev/ram9 bs=1k count=4096,mke2fs/dev/ram9,mount-t ext2/dev/ram9 ramdisk/,把,local,中的文件复制到,ramdisk,目录中,也就是那块内存中。,cp-R local/*ramdisk/,umount ramdisk,将内存中的内容压缩为,initrd.gz,,并复制到,bootldr,盘中,dd if=/dev/ram9 bs=1k|gzip-v9 initrd.gz,c
11、p initrd.gz/mnt/floppy/,umount/mnt/floppy,这样,,bootldr,盘就完成了。,一个根文件系统需要包含支持,Linux,系统运行的所有文件。通常包括:,基本的文件系统结构,基本的目录:,/dev,/proc,/bin,/sbin,/etc,/usr,/tmp,等。,基本的工具:,sh,ls,cp,cd,mv,等。,基本的配置文件:,rc,inittab,fstab,等。,设备:,/dev/hd*,/dev/tty*,/dev/fd0,/dev/ram*,/dev/console,等,.,基本的运行库。,Busybox,和,Tinylogin,是在嵌入式
12、系统上常用的工具包,它们包含了上面提到的常用的工具和目录结构等,而且经过重新改写后所生成的代码比普通的,Linux,系统上的工具要小的多。,六,.,定制根文件系统,编辑,Busybox,的,Config.h,文件,选择自己需要的工具。修改,Busybox,和,Tinylogin,的,Makefile,文件,制定它们使用静态链接方式,(DOSTATIC=true),,这样就不需要在生成的系统中添加运行库了。将编译好的,Busybox,和,Tinylogin,文件放到,rootfs/local,中。,在,rootfs/local,中在自己创建下面几个目录:,dev/,tmp/,etc/,proc/
13、,可以将系统中,/dev,下的设备复制到这个目录下,只需要复制必要的就可以了,例如:,#cp-dpR/dev/tty0-9/mnt/rootfs/dev,#cp-dpR/dev/ram*/mnt/rootfs/dev,但是要注意一定要包含必要的接各设备,/dev/console,/dev/kmem,/dev/mem,/dev/tty,/dev/ram0,/dev/null,等。,etc/,目录下包含了目标系统运行所必须的配置文件,它包括的内容依赖与目标系统所要运行的程序。最低限度,它包括下面几个文件:,inittab,、,rc,、,fstab,、,passwd,、,group,、,shadow
14、,、,termcap,等。做为,init,进程的参数,,inittab,可以非常简单,仅需要包括下面几行即可:,:sysinit:/etc/rc,:askfirst:/bin/login,tty2:askfirst:/bin/login,tty3:askfirst:/bin/login,tty4:askfirst:/bin/login,:ctrlaltdel:/sbin/reboot,:restart:/sbin/init,:shutdown:/bin/umount-a-r,:shutdown:/sbin/swapoff-a,其中,sysinit,指明系统初始化脚本,rc,。,rc,所包含内容
15、也可以非常少:,#!/bin/sh,/bin/mount-av,/bin/umount/mnt/initrd,/bin/hostname papaya,fstab,的内容为:,none/proc proc defaults 0 0,none/tmp tmpfs defaults 0 0,其他的配置文件可以从原来的系统中获得,然后修剪掉不必要的内容即可。,现在在,/mnt/rootfs,中已经包含了运行一个最低限度,Linux,系统所必须的所有文件和工具,,下面需要将它们压缩成一个文件系统了。插入,rootfs,软盘并执行,bootldr/rootfs/mkrootfs.sh,#!/bin/sh
16、,rm-f rootfs.cpio.bz2,dd if=/dev/zero of=/dev/ram0 bs=1k count=4096,mke2fs/dev/ram0,mount-t ext2/dev/ram0 ramdisk/,cp-R local/*ramdisk/,cd ramdisk/,find.-depth-print|cpio-o ./rootfs.cpio,cd.,bzip2 rootfs.cpio,umount ramdisk,dd if=rootfs.cpio.bz2 of=/dev/fd0 bs=1k,OK,,,rootfs,盘也完成了,可以重启机器验证了。,将内核与文件系统进行整合,如果不用,Grub,引导还有两种选择,不过根文件系统就不能象上面那样打包再压缩,也不再使用,initrd,。把所有根文件系统文件放到一个目录中,(,比如上面的,rootfs/local),,然后执行,dd if=/dev/zero of=/dev/ram0 bs=1k count=4096,mke2fs/dev/ram0,mount-t ext2/dev/ram0 ramdisk/,c
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专题党课讲稿:以高质量党建保障国有企业高质量发展
- 廉政党课讲稿材料:坚决打好反腐败斗争攻坚战持久战总体战涵养风清气正的政治生态
- 在新录用选调生公务员座谈会上和基层单位调研座谈会上的发言材料
- 总工会关于2025年维护劳动领域政治安全的工作汇报材料
- 基层党建工作交流研讨会上的讲话发言材料
- 粮食和物资储备学习教育工作部署会上的讲话发言材料
- 市工业园区、市直机关单位、市纪委监委2025年工作计划
- 检察院政治部关于2025年工作计划
- 办公室主任2025年现实表现材料
- 2025年~村农村保洁员规范管理工作方案
- 在深入贯彻中央8项规定精神学习教育工作部署会议上的讲话发言材料4篇
- 开展深入贯彻规定精神学习教育动员部署会上的讲话发言材料3篇
- 在司法党组中心学习组学习会上的发言材料
- 国企党委关于推动基层党建与生产经营深度融合工作情况的报告材料
- 副书记在2025年工作务虚会上的发言材料2篇