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

上传人:磨石 文档编号:242974873 上传时间:2024-09-13 格式:PPTX 页数:24 大小:181.56KB
返回 下载 相关 举报
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第1页
第1页 / 共24页
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第2页
第2页 / 共24页
嵌入式开发教程之自己定制软盘上的Linux系统方案课件_第3页
第3页 / 共24页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,编辑母版文本样式,第二级,第三级,第四级,第五级,2020/5/20 Wednesday,PPT,学习交流,#,嵌入式开发教程之自己定制软盘上的,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,。如果是后者,使用的,Boot Loader,就是,arch/i386/boot/bootsect.S,。当内核被编译的时候,这段执行代码就被链接到内核,image,的最开始的地方。这样很容易就能只要把内核复制到起始位置为第一个扇区的软盘上就能得到可自启动的软盘。内核会初始化设备驱动和内部的数据结构,之后它会到一个特定的位置,Ramdisk Word,来获得根文件系统的位置。内核必须知道去那里寻找这个根文件系统,否则它将停机。,二,.,嵌入式开发教程,:,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 -t ext2 /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,三,.,嵌入式开发教程,:,定制,Grub,引导程序,6,PPT,学习交流,然后创建一个链接,#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,嵌入式开发教程,10,PPT,学习交流,下面将,initrd,中的文件,copy,到,sysroot/bin,目录下,这样可以把根文件系统中一部分内容放到,initrd(,第一张软盘,),中,因为软盘容量有限,当第一张软盘空间有剩余,而第二章软盘空间紧张的时候这会非常有用。,echo Copying:,for bzip2 chroot cp cpio echo readkey; do,echo -en ; echo -n $file,cp /bin/$file,done,下面将,/,目录设定为当前目录,即,sysroot,,并执行刚刚从,rootfs,盘中解压出来的,init,。,嵌入式开发教程,11,PPT,学习交流,echo ,echo Pivoting / .,pivot_root . mnt/initrd,echo Starting init process.,exec 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,12,PPT,学习交流,取,4M,大小的内存块格式化为,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,cp initrd.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/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/s -a,16,PPT,学习交流,其中,sysinit,指明系统初始化脚本,rc,。,rc,所包含内容也可以非常少:,#!/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,17,PPT,学习交流,#!/bin/sh,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,盘也完成了,可以重启机器验证了。,18,PPT,学习交流,将内核与文件系统进行整合,如果不用,Grub,引导还有两种选择,不过根文件系统就不能象上面那样打包再压缩, 也不再使用,initrd,。把所有根文件系统文件放到一个目录中,(,比如上面的,rootfs/local),,然后执行,dd if=/dev/zero of=/dev/ram0 bs=1k count=4096,mke2fs /dev/ram0,mount -t ext2 /dev/ram0 ramdisk/,cp -R local/* ramdisk/,umount ramdisk,dd if=/dev/ram0 bs=1k | gzip -v9 rootfs.gz,七,.,其他方法,19,PPT,学习交流,1.,将内核与文件系统放置在一张软盘上,确定内核的大小和的大小之合没有超出软盘的限制。记住内核的大小,然后将内核写到软盘上:,#dd if=bzImage of=/dev/fd0 bs=1k,353,1 records in,353,1 records out,之后,设置根设备为软盘本身,并且设置根以读写方式装载,#rdev /dev/fd0 /dev/fd0,#rdev -R /dev/fd0 0,20,PPT,学习交流,上面这个例子表示,dd,写了,353,个完整记录和一个部分记录到软盘上,因此内核占用了软盘的前,354,个记录块。记住这个数字,然后设置内核的,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,这样一张同时包含内核和文件系统的软盘就成功了。,21,PPT,学习交流,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,内核、根文件系统、引导程序之间的整合方法有很多,他们各有各自的特点,有待读者自己思考。,22,PPT,学习交流,按照本文方法所构造的,Linux,系统虽然还不完善,但通过逐步的改进,将能做出一个有价值的系统来。真正的,Linux,嵌入式系统根据不同的应用方向通常还包括图形用户界面或者是网络浏览器等应用程序。值得庆幸的是很多,OpenSource,的项目提供了所需要的组件,结合这些优秀的开源项目,就可以形成一套真正的嵌入式,Linux,操作系统。,八,.,前景,23,PPT,学习交流,此课件下载可自行编辑修改,供参考!,感谢您的支持,我们努力做得更好!,24,PPT,学习交流,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 市场营销


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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