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

上传人:s****8 文档编号:69239149 上传时间:2022-12-31 格式:PPTX 页数:23 大小:113.86KB
返回 下载 相关 举报
嵌入式开发教程之自己定制软盘上的Linux系统方案.pptx_第1页
第1页 / 共23页
嵌入式开发教程之自己定制软盘上的Linux系统方案.pptx_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《嵌入式开发教程之自己定制软盘上的Linux系统方案.pptx》由会员分享,可在线阅读,更多相关《嵌入式开发教程之自己定制软盘上的Linux系统方案.pptx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构嵌入式开发教程之自己定制软盘上的嵌入式开发教程之自己定制软盘上的LinuxLinux系统方案系统方案引言引言一一.前言前言二二.Linux.Linux启动过程启动过程三三.定制定制GrubGrub引导程序引导程序四四.定制定制LinuxLinux内核内核五五.制定制定initrdinitrd六六.定制根文件系统定制根文件系统七七.其他方法其他方法八八.前景前景www.embedtrain.org www.mobiletrain.org千锋嵌入式学

2、院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构嵌入式Linux是由一个几百KB的Linux内核和一个根据需要制定的文件系统所构成了,由于Linux是开放源代码的操作系统,所以在嵌入式领域有着非常广阔的前景,并已经广泛应用在许多手机、PDA、MP3播放器等许多电子产品中。本文将介绍一种两张软盘上的Linux系统,它可以当作系统应急修复盘、路由器或防火墙等许多地方,通过对它的研究,也可以加深对嵌入式系统的理解。引言引言www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构嵌入式Linux

3、是由一个几百KB的Linux内核和一个根据需要制定的文件系统所构成了,由于Linux是开放源代码的操作系统,所以在嵌入式领域有着非常广阔的前景,并已经广泛应用在许多手机、PDA、MP3播放器等许多电子产品中。本文将介绍一种两张软盘上的Linux系统,它可以当作系统应急修复盘、路由器或防火墙等许多地方,通过对它的研究,也可以加深对嵌入式系统的理解。一一.前言前言www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构所有的PC机在加电之后,BIOS会寻找到启动盘第一个扇区,并将其复制到RAM中来执行它,

4、对于两种不同的启动方式,这个扇区通常含有两种不同的代码:引导程序(比如Lilo或Grub等)的代码,引导程序会帮助定位内核的位置。内核的代码,这通常是从软盘启动时使用的引导的方式。对于前者,通常需要内核支持initrd。如果是后者,使用的Boot Loader就是arch/i386/boot/bootsect.S。当内核被编译的时候,这段执行代码就被链接到内核image的最开始的地方。这样很容易就能只要把内核复制到起始位置为第一个扇区的软盘上就能得到可自启动的软盘。内核会初始化设备驱动和内部的数据结构,之后它会到一个特定的位置Ramdisk Word来获得根文件系统的位置。内核必须知道去那里寻

5、找这个根文件系统,否则它将停机。二二.嵌入式开发教程嵌入式开发教程:LinuxLinux启动过程启动过程www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构在使用软盘启动的方式时,内核可以把一个压缩的文件系统释放到RAM中,称之为Ramdisk,这是一个内存区域,但内核会把它当作磁盘一样使用。本文中介绍的例子使用Grub做为引导程序,并使用initrd来辅助Linux的启动。两张软盘分别命名为bootldr盘和rootfs盘,在bootldr盘中内容为grub、内核、initrd,rootfs盘中

6、是压缩过的根文件系统。系统启动时bootldr盘的Grub定位并执行内核,然后内核解开initrd,并执行linuxrc文件,这个文件负责提示用户更换rootfs盘并将其中内容解压至内存中,然后执行刚刚解压的init继续启动过程。嵌入式开发教程嵌入式开发教程www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构插入一张软盘,然后将其格式化,然后加载到/mnt/floppy#mke2fs/dev/fd0#mount-t ext2/dev/fd0/mnt/floppy-o loop在其中创建/boot/

7、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=10title Floppy Linuxkernel(fd0)/bzImage root=/dev/ram0 initrd(fd0)/initrd.gz 三三.嵌入式开发教程嵌入式开发教程:定制定制GrubGrub引导程序引导程序www.embedtrain.org www.m

8、obiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构然后创建一个链接#ln-s grub.conf menu.lst 执行/sbin/grub-batch-device-map=/dev/null /dev/nullecho 将第二章软盘上的内容解压到sysroot目录(内存)中。echo Loading root-archive from floppy.dd if=/dev/fd0 bs=1k|bzip2-d|cpio-idv 嵌入式开发教程嵌入式开发教程www.embedtrain.org www.mobiletrain.org千锋嵌入式学

9、院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构下面将initrd中的文件copy到sysroot/bin目录下,这样可以把根文件系统中一部分内容放到initrd(第一张软盘)中,因为软盘容量有限,当第一张软盘空间有剩余,而第二章软盘空间紧张的时候这会非常有用。echo Copying:for file in bzip2 chroot cp cpio echo readkey;do echo-en ;echo-n$file cp/bin/$file./bin/$filedone 下面将/目录设定为当前目录,即sysroot,并执行刚刚从rootfs盘中解压出来的init。嵌入式开

10、发教程嵌入式开发教程www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构echo echo Pivoting/.pivot_root.mnt/initrdecho Starting init process.exec chroot./sbin/init/dev/console 2&1echo-enSomething went wrong./bin/sh|/mnt/initrd/bin/sh 当initrd所有必须的文件都放到bootldr/initrd/local目录下之后,就可以执行bootld

11、r/initrd/mkinitrd.sh来创建initrd镜像文件。mkinitrd.sh的内容为:#!/bin/shmount-t ext2/dev/fd0/mnt/floppyrm-f/mnt/floppy/initrd.gzrm-f initrd.gz www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构取4M大小的内存块格式化为ext2格式,并将其mount到bootldr/initrd/ramdisk上。dd if=/dev/zero of=/dev/ram9 bs=1k count=4

12、096mke2fs/dev/ram9mount-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.gzcp initrd.gz/mnt/floppy/umount/mnt/floppy 这样,bootldr盘就完成了。www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院

13、最专业的嵌入式培训机构最专业的嵌入式培训机构一个根文件系统需要包含支持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、的工具要小的多。六六.定制根文件系统定制根文件系统www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构编辑Busybox的Config.h文件,选择自己需要的工具。修改Busybox和Tinylogin的Makefile文件,制定它们使用静态链接方式(DOSTATIC=true),这样就不需要在生成的系统中添加运行库了。将编译好的Busybox和Tinylogin文件放到rootfs/local中。在rootfs/local中在自己创建下面几个目录:dev/,tmp/,etc/,proc/可以将系

15、统中/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等。www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构etc/目录下包含了目标系统运行所必须的配置文件,它包括的内容依赖与目标系统所要运行的程序。

16、最低限度,它包括下面几个文件:inittab、rc、fstab、passwd、group、shadow、termcap等。做为init进程的参数,inittab可以非常简单,仅需要包括下面几行即可::sysinit:/etc/rc:askfirst:/bin/login tty2:askfirst:/bin/logintty3:askfirst:/bin/logintty4:askfirst:/bin/login:ctrlaltdel:/sbin/reboot:restart:/sbin/init:shutdown:/bin/umount-a-r:shutdown:/sbin/swapoff-

17、a www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构其中sysinit指明系统初始化脚本rc。rc所包含内容也可以非常少:#!/bin/sh/bin/mount-av/bin/umount/mnt/initrd/bin/hostname papaya fstab的内容为:none/proc proc defaults 0 0none/tmp tmpfs defaults 0 0 其他的配置文件可以从原来的系统中获得,然后修剪掉不必要的内容即可。现在在/mnt/rootfs中已经包含了运行一个最

18、低限度Linux系统所必须的所有文件和工具,下面需要将它们压缩成一个文件系统了。插入rootfs软盘并执行bootldr/rootfs/mkrootfs.sh www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构#!/bin/shrm-f rootfs.cpio.bz2dd if=/dev/zero of=/dev/ram0 bs=1k count=4096mke2fs/dev/ram0mount-t ext2/dev/ram0 ramdisk/cp-R local/*ramdisk/cd ram

19、disk/find.-depth-print|cpio-o ./rootfs.cpiocd.bzip2 rootfs.cpioumount ramdiskdd if=rootfs.cpio.bz2 of=/dev/fd0 bs=1k OK,rootfs盘也完成了,可以重启机器验证了。www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构将内核与文件系统进行整合,如果不用Grub引导还有两种选择,不过根文件系统就不能象上面那样打包再压缩,也不再使用initrd。把所有根文件系统文件放到一个目录中(比如

20、上面的rootfs/local),然后执行 dd if=/dev/zero of=/dev/ram0 bs=1k count=4096mke2fs/dev/ram0mount-t ext2/dev/ram0 ramdisk/cp-R local/*ramdisk/umount ramdiskdd if=/dev/ram0 bs=1k|gzip-v9 rootfs.gz 七七.其他方法其他方法www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构1.将内核与文件系统放置在一张软盘上 确定内核的大小和的

21、大小之合没有超出软盘的限制。记住内核的大小,然后将内核写到软盘上:#dd if=bzImage of=/dev/fd0 bs=1k3531 records in3531 records out 之后,设置根设备为软盘本身,并且设置根以读写方式装载#rdev/dev/fd0/dev/fd0#rdev-R/dev/fd0 0 www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构上面这个例子表示dd写了353个完整记录和一个部分记录到软盘上,因此内核占用了软盘的前354个记录块。记住这个数字,然后设置内

22、核的Ramdisk Word。Ramdisk Word可以通过rdev命令设置,它的内容为:如果15位设置的话,内核在加载文件系统之前会进行提示,这在下面将内核与文件系统盘分开的情况时是必要的。对于上面的情况,需要在0-10位指出ramdisk的偏移,并将14位置1,所以得出的ramdisk word十进制表示为:355+214=355+16384=16739#rdev-r/dev/fd0 16739 之后#dd if=rootfs.gz of=/dev/fd0 bs=1k seek=354 这样一张同时包含内核和文件系统的软盘就成功了。www.embedtrain.org www.mobil

23、etrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构2.内核与文件系统分别占用一张软盘 与上面一样#dd if=bzImage of=/dev/fd0 bs=1k#rdev/dev/fd0/dev/fd0#rdev-R/dev/fd0 0不同的是ramdisk word为 0+214+215=49152#rdev-r/dev/fd0 49152然后换零一张软盘#dd if=rootfs.gz of=/dev/fd0 bs=1k 内核、根文件系统、引导程序之间的整合方法有很多,他们各有各自的特点,有待读者自己思考。www.embedtrain.org www.mobiletrain.org千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构按照本文方法所构造的Linux系统虽然还不完善,但通过逐步的改进,将能做出一个有价值的系统来。真正的Linux嵌入式系统根据不同的应用方向通常还包括图形用户界面或者是网络浏览器等应用程序。值得庆幸的是很多OpenSource的项目提供了所需要的组件,结合这些优秀的开源项目,就可以形成一套真正的嵌入式Linux操作系统。八八.前景前景

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

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁