[原創] 利用busybox, extlinux 在工控機CompactFlash(CF卡)上構建Linux系統(上)

 

上篇:CF卡分區, extlinux的安裝

中篇:構建根文件系統

下篇:2.6內核剪裁及Busybox編譯配置及其分析

 

 

 

 

硬件平臺:研華3355

軟件:busybox-1.13.3, extlinux 3.63, linux-2.6.32

開發環境: Ubuntu 9.10

 

(一)CF卡的分區, 格式化:

PC機上利用多口讀卡器連接CF卡,

fdisk -l  查看CF卡的分區, 例如我的CF卡對應的是/dev/sdb;

fdisk /dev/sdb,進入fdisk分區命令提示, 簡單的介紹fdisk分區過程

  m 打印提示;

  p 打印分區信息;

  d 刪除分區, 假設已經存在分區/dev/sdb1, 按下d後輸入1, 即刪除了此分區;

  n 添加分區, 這裏只添加一個p(primary), 並佔用所有的存儲空間;

  a 設置某分區爲boot分區, 即可引導分區;

  w 將改動寫入, 並推出fdisk, 鍵入w之前, 先用p查看當前分區情況;

  q 不做改動退出;

 

將分區格式化爲ext2格式: mkfs.ext2 /dev/sdb1 

檢測ext2格式: e2fsck -a /dev/sdb1

注:如果不運行e2fsck, 系統啓動的時候會報"EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended"

 

 

 

(二)CF卡上bootloader的創建

常見的有GRUB, LILO, syslinux, extlinux, 後兩者更適合U盤/CF卡, 

syslinux適用於dos分區, 而extlinux適用於ext2分區, 下載地址:

http://syslinux.zytor.com/wiki/index.php/SYSLINUX

http://syslinux.zytor.com/wiki/index.php/EXTLINUX

 

Ubuntu 9.10用apt-get install extlinux安裝, 設備名爲/dev/sdb1,掛載到/mnt/cf :mount /dev/sdb1 /mnt/cf

extlinux -i /mnt/cf

注意syslinux和extlinux的不同:

syslinux的配置文件是syslinux.cfg, 要先安裝syslinux再掛載分區,例 syslinux /dev/sdb1;

extlinux的配置文件extlinux.conf, 要先把分區掛載然後安裝extlinux, 例extlinux -i /mnt/cf;

在/mnt/cf創建配置文件extlinux.conf然後編輯, 內容如下:

 

default emblinux
timeout 10
prompt 0
label emblinux
  kernel bzImage
  append noinitrd root=/dev/sda1 rw init=/linuxrc ide=nodma

 

 

 

注意CF卡在工控機上被識別爲sda, 而不是hda上, noinitrd表示沒有掛載initrd.img,

 

類似於嵌入式arm平臺的linux"noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"

詳細解釋在下面的鏈接

http://www.sudu.cn/info/html/edu/20080407/262839.html

 

 

(三)向CF卡拷貝Kernel

 

 內核的剪裁及配置, 請見http://blog.csdn.net/dos5gw/archive/2010/10/26/5965992.aspx

 

 make mrproper #清除從前編譯內核時殘留的.O文件

 make menuconfig

 make dep #(確保關鍵文件在正確的位置)

 make clean #(確保所有有關文件都處於最新版本狀態) 

 make bzImage

後把生成的/linux-2.6.32/arch/x86/boot/bzImage拷貝至CF卡分區/dev/sdb1下.

 

 

//-----------------------------------------------

//--linux大致啓動過程-------------------------

grub(bl) ->kernel -> initrd.img -> rootfs -> sbin/init(linuxrc, 僅針對busybox)

解釋如下:

kernel :桌面os中一般爲vmlinuz文件,或者zImage、bzImage;

initrd.img :臨時的根文件系統映像全名是initial ram disk(google keywords initrd 製作),使用完後被卸載,然後轉入真正的根文件,當然在有些嵌入式系統中也可以不卸載initrd,而繼續作爲根文件系統;

rootfs:不解釋;

sbin/init: http://hi.baidu.com/tcxx05/blog/item/15cfc7fc0cd0d089b801a0d8.html

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章