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

來源:互聯網
上載者:User

 

上篇: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, 後兩者更適合隨身碟/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

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.