<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 軟盤上的Linux系統(tǒng)方案

          軟盤上的Linux系統(tǒng)方案

          作者: 時間:2011-05-20 來源:網(wǎng)絡(luò) 收藏
          四.定制內(nèi)核

          本文引用地址:http://www.ex-cimer.com/article/150724.htm

            由于大小的限制,內(nèi)核應(yīng)盡可能只包含必要的一些支持,對于本文中的例子一定要選上initrd支持。比如如果做為修復(fù)盤的話,必要的支持包括:IDE,PCI,和需要的文件類型等等就可以了,而沒有必要網(wǎng)絡(luò)支持,當(dāng)然,如果做為路由器或者防火墻的話,網(wǎng)絡(luò)支持是必要的,而其他的這可相應(yīng)的刪除掉。
            
            #make [xconfig | menuconfig | config]
            #make bzImage
            
            如果添加了模塊的支持,還需要
            
            #make modules
            
            之后就得到了內(nèi)核鏡像bzImage。如果bzImage的大小超出了的限制,就需要重新再來配置一下。將編譯好的bzImage放到bootldr盤的根目錄下,如果把bzImage改了名字,要注意與grub.conf中的名字一致。
            
            五.制定initrd

            在initrd/local目錄下建立bin, dev, etc, lib, proc, sysroot, usr目錄。其中dev目錄下包括必要的設(shè)備文件,比如tty, ram, console等等, bin中必要的可執(zhí)行文件有bzip2, chroot, cp, cpio, dd, echo, mount, pivot_root, readkey, sh, test等。Busybox提供了其中大部分。 bzip2, dd, cpio用來解壓縮第二張上的內(nèi)容,chroot, pivot_root用來轉(zhuǎn)換根目錄。
            
            編輯initrd/local/linuxrc文件:
            
            #!/bin/sh
            
            把sysroot目錄mount到一塊內(nèi)存上,并建立tmpfs文件
            
            echo Mounting new root filsystem ...
            mount tmpfs /sysroot -t tmpfs
            cd /sysroot
            
            下面的readkey是一個很簡單的程序,當(dāng)啟動過程執(zhí)行到這里的時候暫停,等待換入第二章軟盤,然后接受任意鍵輸入繼續(xù)執(zhí)行啟動過程。這個小程序讀者可以自己實(shí)現(xiàn),要注意的是最好使用靜態(tài)鏈接。
            
            echo
            echo -en Insert the second disk and press ANY key...
            readkey > /dev/null
            echo
            
            將第二章軟盤上的內(nèi)容解壓到sysroot目錄(內(nèi)存)中。
            
            echo Loading root-archive from floppy ...
            dd if=/dev/fd0 bs=1k | bzip2 -d | cpio -idv
            
            下面將initrd中的文件copy到sysroot/bin目錄下,這樣可以把根文件系統(tǒng)中一部分內(nèi)容放到initrd(第一張軟盤)中,因?yàn)檐洷P容量有限,當(dāng)?shù)谝粡堒洷P空間有剩余,而第二章軟盤空間緊張的時候這會非常有用。
            
            echo Copying:
            for file in bzip2 chroot cp cpio echo readkey; do
             echo -en ; echo -n $file
             cp /bin/$file ./bin/$file
            done
            
            下面將/目錄設(shè)定為當(dāng)前目錄,即sysroot,并執(zhí)行剛剛從rootfs盤中解壓出來的init。
            
            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
            
            當(dāng)initrd所有必須的文件都放到bootldr/initrd/local目錄下之后,就可以執(zhí)行bootldr/initrd/mkinitrd.sh來創(chuàng)建initrd鏡像文件。mkinitrd.sh的內(nèi)容為:
            
            #!/bin/sh
            mount -t ext2 /dev/fd0 /mnt/floppy
            rm -f /mnt/floppy/initrd.gz
            rm -f initrd.gz
            
            取4M大小的內(nèi)存塊格式化為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中的文件復(fù)制到ramdisk目錄中,也就是那塊內(nèi)存中。
            
            cp -R local/* ramdisk/
            umount ramdisk
            
            將內(nèi)存中的內(nèi)容壓縮為initrd.gz,并復(fù)制到bootldr盤中
            
            dd if=/dev/ram9 bs=1k | gzip -v9 > initrd.gz
            cp initrd.gz /mnt/floppy/
            umount /mnt/floppy
            
            這樣,bootldr盤就完成了。
            
            六.定制根文件系統(tǒng)

            一個根文件系統(tǒng)需要包含支持系統(tǒng)運(yùn)行的所有文件。通常包括:
            
            基本的文件系統(tǒng)結(jié)構(gòu)
            
            基本的目錄: /dev, /proc, /bin, /sbin, /etc, /usr, /tmp等。
            
            基本的工具: sh, ls, cp, cd, mv等。
            
            基本的配置文件: rc, inittab, fstab等。
            
            設(shè)備: /dev/hd*, /dev/tty*, /dev/fd0, /dev/ram*, /dev/console等.
            
            基本的運(yùn)行庫。
            
            Busybox和Tinylogin是在嵌入式系統(tǒng)上常用的工具包,它們包含了上面提到的常用的工具和目錄結(jié)構(gòu)等,而且經(jīng)過重新改寫后所生成的代碼比普通的系統(tǒng)上的工具要小的多。
            
            編輯Busybox的Config.h文件,選擇自己需要的工具。修改Busybox和Tinylogin的Makefile文件,制定它們使用靜態(tài)鏈接方式(DOSTATIC=true),這樣就不需要在生成的系統(tǒng)中添加運(yùn)行庫了。將編譯好的Busybox和Tinylogin文件放到rootfs/local中。
            
            在rootfs/local中在自己創(chuàng)建下面幾個目錄:dev/, tmp/, etc/, proc/
            
            可以將系統(tǒng)中/dev下的設(shè)備復(fù)制到這個目錄下,只需要復(fù)制必要的就可以了,例如:
            
            #cp -dpR /dev/tty[0-9] /mnt/rootfs/dev
            #cp -dpR /dev/ram* /mnt/rootfs/dev
            
            但是要注意一定要包含必要的接各設(shè)備/dev/console, /dev/kmem, /dev/mem, /dev/tty, /dev/ram0, /dev/null等。
            
            etc/目錄下包含了目標(biāo)系統(tǒng)運(yùn)行所必須的配置文件,它包括的內(nèi)容依賴與目標(biāo)系統(tǒng)所要運(yùn)行的程序。最低限度,它包括下面幾個文件:inittab、rc、fstab、passwd、group、shadow、termcap等。做為init進(jìn)程的參數(shù),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指明系統(tǒng)初始化腳本rc。rc所包含內(nèi)容也可以非常少:
            
            #!/bin/sh
            /bin/mount -av
            /bin/umount /mnt/initrd
            /bin/hostname papaya
            
            fstab的內(nèi)容為:
            
            none /proc proc defaults 0 0
            none /tmp tmpfs defaults 0 0
            
            其他的配置文件可以從原來的系統(tǒng)中獲得,然后修剪掉不必要的內(nèi)容即可。
            
            現(xiàn)在在/mnt/rootfs中已經(jīng)包含了運(yùn)行一個最低限度Linux系統(tǒng)所必須的所有文件和工具,下面需要將它們壓縮成一個文件系統(tǒng)了。插入rootfs軟盤并執(zhí)行bootldr/rootfs/mkrootfs.sh
            
            #!/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盤也完成了,可以重啟機(jī)器驗(yàn)證了。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          關(guān)鍵詞: 方案 系統(tǒng) Linux 軟盤

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();