<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 軟盤(pán)上的Linux系統方案

軟盤(pán)上的Linux系統方案

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

本文引用地址:http://dyxdggzs.com/article/150724.htm

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

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

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 方案 系統 Linux 軟盤(pán)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>