嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第1页
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第2页
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第3页
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第4页
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式开发教程之自己定制软盘上的Linux系统方案,引言一.前言二.Linux启动过程三.定制Grub引导程序四.定制Linux内核五.制定initrd六.定制根文件系统七.其他方法八.前景,1,PPT学习交流,嵌入式Linux是由一个几百KB的Linux内核和一个根据需要制定的文件系统所构成了,由于Linux是开放源代码的操作系统,所以在嵌入式领域有着非常广阔的前景,并已经广泛应用在许多手机、PDA、MP3播放器等许多电子产品中。本文将介绍一种两张软盘上的Linux系统,它可以当作系统应急修复盘、路由器或防火墙等许多地方,通过对它的研究,也可以加深对嵌入式系统的理解。,引言,2,PPT学习交流,嵌入式Linux是由一个几百KB的Linux内核和一个根据需要制定的文件系统所构成了,由于Linux是开放源代码的操作系统,所以在嵌入式领域有着非常广阔的前景,并已经广泛应用在许多手机、PDA、MP3播放器等许多电子产品中。本文将介绍一种两张软盘上的Linux系统,它可以当作系统应急修复盘、路由器或防火墙等许多地方,通过对它的研究,也可以加深对嵌入式系统的理解。,一.前言,3,PPT学习交流,所有的PC机在加电之后,BIOS会寻找到启动盘第一个扇区,并将其复制到RAM中来执行它,对于两种不同的启动方式,这个扇区通常含有两种不同的代码:引导程序(比如Lilo或Grub等)的代码,引导程序会帮助定位内核的位置。内核的代码,这通常是从软盘启动时使用的引导的方式。对于前者,通常需要内核支持initrd。如果是后者,使用的BootLoader就是arch/i386/boot/bootsect.S。当内核被编译的时候,这段执行代码就被链接到内核image的最开始的地方。这样很容易就能只要把内核复制到起始位置为第一个扇区的软盘上就能得到可自启动的软盘。内核会初始化设备驱动和内部的数据结构,之后它会到一个特定的位置RamdiskWord来获得根文件系统的位置。内核必须知道去那里寻找这个根文件系统,否则它将停机。,二.嵌入式开发教程:Linux启动过程,4,PPT学习交流,在使用软盘启动的方式时,内核可以把一个压缩的文件系统释放到RAM中,称之为Ramdisk,这是一个内存区域,但内核会把它当作磁盘一样使用。本文中介绍的例子使用Grub做为引导程序,并使用initrd来辅助Linux的启动。两张软盘分别命名为bootldr盘和rootfs盘,在bootldr盘中内容为grub、内核、initrd,rootfs盘中是压缩过的根文件系统。系统启动时bootldr盘的Grub定位并执行内核,然后内核解开initrd,并执行linuxrc文件,这个文件负责提示用户更换rootfs盘并将其中内容解压至内存中,然后执行刚刚解压的init继续启动过程。,嵌入式开发教程,5,PPT学习交流,插入一张软盘,然后将其格式化,然后加载到/mnt/floppy#mke2fs/dev/fd0#mount-text2/dev/fd0/mnt/floppy-oloop在其中创建/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=0timeout=10titleFloppyLinuxkernel(fd0)/bzImageroot=/dev/ram0initrd(fd0)/initrd.gz,三.嵌入式开发教程:定制Grub引导程序,6,PPT学习交流,然后创建一个链接#ln-sgrub.confmenu.lst执行/sbin/grub-batch-device-map=/dev/null/dev/nullecho将第二章软盘上的内容解压到sysroot目录(内存)中。echoLoadingroot-archivefromfloppy.ddif=/dev/fd0bs=1k|bzip2-d|cpio-idv,嵌入式开发教程,10,PPT学习交流,下面将initrd中的文件copy到sysroot/bin目录下,这样可以把根文件系统中一部分内容放到initrd(第一张软盘)中,因为软盘容量有限,当第一张软盘空间有剩余,而第二章软盘空间紧张的时候这会非常有用。echoCopying:forbzip2chrootcpcpioechoreadkey;doecho-en;echo-n$filecp/bin/$filedone下面将/目录设定为当前目录,即sysroot,并执行刚刚从rootfs盘中解压出来的init。,嵌入式开发教程,11,PPT学习交流,echoechoPivoting/.pivot_root.mnt/initrdechoStartinginitprocess.execchroot./sbin/init/dev/console2&1echo-enSomethingwentwrong./bin/sh|/mnt/initrd/bin/sh当initrd所有必须的文件都放到bootldr/initrd/local目录下之后,就可以执行bootldr/initrd/mkinitrd.sh来创建initrd镜像文件。mkinitrd.sh的内容为:#!/bin/shmount-text2/dev/fd0/mnt/floppyrm-f/mnt/floppy/initrd.gzrm-finitrd.gz,12,PPT学习交流,取4M大小的内存块格式化为ext2格式,并将其mount到bootldr/initrd/ramdisk上。ddif=/dev/zeroof=/dev/ram9bs=1kcount=4096mke2fs/dev/ram9mount-text2/dev/ram9ramdisk/把local中的文件复制到ramdisk目录中,也就是那块内存中。cp-Rlocal/*ramdisk/umountramdisk将内存中的内容压缩为initrd.gz,并复制到bootldr盘中ddif=/dev/ram9bs=1k|gzip-v9initrd.gzcpinitrd.gz/mnt/floppy/umount/mnt/floppy这样,bootldr盘就完成了。,13,PPT学习交流,一个根文件系统需要包含支持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是在嵌入式系统上常用的工具包,它们包含了上面提到的常用的工具和目录结构等,而且经过重新改写后所生成的代码比普通的Linux系统上的工具要小的多。,六.定制根文件系统,14,PPT学习交流,编辑Busybox的Config.h文件,选择自己需要的工具。修改Busybox和Tinylogin的Makefile文件,制定它们使用静态链接方式(DOSTATIC=true),这样就不需要在生成的系统中添加运行库了。将编译好的Busybox和Tinylogin文件放到rootfs/local中。在rootfs/local中在自己创建下面几个目录:dev/,tmp/,etc/,proc/可以将系统中/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等。,15,PPT学习交流,etc/目录下包含了目标系统运行所必须的配置文件,它包括的内容依赖与目标系统所要运行的程序。最低限度,它包括下面几个文件:inittab、rc、fstab、passwd、group、shadow、termcap等。做为init进程的参数,inittab可以非常简单,仅需要包括下面几行即可::sysinit:/etc/rc:askfirst:/bin/logintty2:askfirst:/bin/logintty3:askfirst:/bin/logintty4:askfirst:/bin/login:ctrlaltdel:/sbin/reboot:restart:/sbin/init:shutdown:/bin/umount-a-r:shutdown:/sbin/s-a,16,PPT学习交流,其中sysinit指明系统初始化脚本rc。rc所包含内容也可以非常少:#!/bin/sh/bin/mount-av/bin/umount/mnt/initrd/bin/hostnamepapayafstab的内容为:none/procprocdefaults00none/tmptmpfsdefaults00其他的配置文件可以从原来的系统中获得,然后修剪掉不必要的内容即可。现在在/mnt/rootfs中已经包含了运行一个最低限度Linux系统所必须的所有文件和工具,下面需要将它们压缩成一个文件系统了。插入rootfs软盘并执行bootldr/rootfs/mkrootfs.sh,17,PPT学习交流,#!/bin/shrm-frootfs.cpio.bz2ddif=/dev/zeroof=/dev/ram0bs=1kcount=4096mke2fs/dev/ram0mount-text2/dev/ram0ramdisk/cp-Rlocal/*ramdisk/cdramdisk/find.-depth-print|cpio-o./rootfs.cpiocd.bzip2rootfs.cpioumountramdiskddif=rootfs.cpio.bz2of=/dev/fd0bs=1kOK,rootfs盘也完成了,可以重启机器验证了。,18,PPT学习交流,将内核与文件系统进行整合,如果不用Grub引导还有两种选择,不过根文件系统就不能象上面那样打包再压缩,也不再使用initrd。把所有根文件系统文件放到一个目录中(比如上面的rootfs/local),然后执行ddif=/dev/zeroof=/dev/ram0bs=1kcount=4096mke2fs/dev/ram0mount-text2/dev/ram0ramdisk/cp-Rlocal/*ramdisk/umountramdiskddif=/dev/ram0bs=1k|gzip-v9rootfs.gz,七.其他方法,19,PPT学习交流,1.将内核与文件系统放置在一张软盘上确定内核的大小和的大小之合没有超出软盘的限制。记住内核的大小,然后将内核写到软盘上:#ddif=bzImageof=/dev/fd0bs=1k3531recordsin3531recordsout之后,设置根设备为软盘本身,并且设置根以读写方式装载#rdev/dev/fd0/dev/fd0#rdev-R/dev/fd00,20,PPT学习交流,上面这个例子表示dd写了353个完整记录和一个部分记录到软盘上,因此内核占用了软盘的前354个记录块。记住这个数字,然后设置内核的RamdiskWord。RamdiskWord可以通过rdev命令设置,它的内容为:如果15位设置的话,内核在加载文件系统之前会进行提示,这在下面将内核与文件系统盘分开的情况时是必要的。对于上面的情况,需要在0-10位指出ramdisk的偏移,并将14位置1,所以得出的ramdiskword十进制表示为:355+214=355+16384=16739#rdev-r/dev/fd016739之后#ddif=rootfs.gzof=/dev/fd0bs=1kseek=354这样一张同时包含内核和文件系统的软盘就成功了。,21,PPT学习交流,2.内核与文件系统分别占用一张软盘与上面一样#ddif=bzImageof=/dev/fd0bs=1k#rdev/dev/fd0/dev/fd0#rdev-R/dev/fd00不同的是ramdiskword为0+214+215=49152#rdev-r/dev/fd049152然后换零一张软盘#ddif=rootfs.gzof=/dev/fd0bs=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论