製作嵌入式系統

第一步:製作交叉編譯環境
我用的是公司同事做好的開發環境
第二步:編譯內核
1. 下載源碼
linux-2.6.38.4.tar.bz2
2. 解壓進入源碼路徑
# tar -xvf linux-2.6.38.4.tar.bz2
# cd linux-2.6.38.4/
3. 配置內核
# make CROSS_COMPILE=586- menuconfig
4. 編譯內核鏡像
# make CROSS_COMPILE=586- bzImage
5. 編譯模塊
# make CROSS_COMPILE=586- modules
6. 安裝模塊
# make CROSS_COMPILE=586- INSTALL_MOD_PATH=/westone/image modules_install
第三步:編譯busybox
1. 下載源碼
busybox-1.18.4.tar.bz2
2. 解壓進入源碼路徑
# tar -xvf busybox-1.18.4.tar.bz2 
# cd busybox-1.18.4/
3. 配置
# make CROSS_COMPILE=586- menuconfig
4. 編譯
# make CROSS_COMPILE=586- 
5. 安裝
# make CROSS_COMPILE=586-  install
第四步:格式化CF卡,並分區
1. 使用fdisk /dev/sdc將CF卡分兩個區,/dev/sdc1  /dev/sdc2
2. 使用mkfs.ext2格式化分區
# mkfs.ext2 /dev/sdc1
# mkfs.ext2 /dev/sdc2
3. 掛載CF卡
mount /dev/sdc1 /mnt
4. # cp /westone/linux-2.6.38.4/arch/x86/boot/bzImage /mnt -rf
第五步:製作根文件分區
1. 自動化腳本內容如下:
#! /bash/sh
echo "Start make rootfs !"
cd /westone/
mkdir –pv rootfs
cd rootfs
mkdir -pv dev etc lib proc tmp usr var
mkdir -pv usr/lib
mkdir -pv var/lib var/lock var/log var/run var/tmp
chmod 777 tmp
chmod 777 var/tmp
cp -dprf /westone/ busybox-1.18.4/_install/* .
cp -rf /dev/console dev/
cp -rf /dev/null dev/
cp -rf /dev/zero dev/
cp -rf /westone/busybox-1.18.4/examples/bootfloppy/etc/* etc/
cp -rf /westone/image/lib/modules lib/
dd if=/dev/zero of=/westone/ramdisk  bs=1M count=16
mkfs.ext2 /westone/ramdisk
mkdir -pv /westone/tmp
mount -o loop /westone/ramdisk /westone/tmp
cp –r rootfs/* /westone/tmp
sync
umount /westone/tmp
gzip -9 /westone/ramdisk
echo "End make rootfs!"
2. # cp /westone/ramdisk.gz /mnt –rf
# sync
第六步:設置bootloader
工具:grub(之前宿主PC安裝過grub,所以沒有在下源碼安裝)
步驟:
1. # mkdir –pv /mnt/grub
2. # cd /boot/grub
# cp *stage* /mnt/grub
3. 執行grub配置,# grub進入
grub> root (hd2,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd2)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd2)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd2) (hd2)1+15 p (hd2,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.
grub> quit
注:
(hd2,0)即爲/dev/hdc1
最開始的時候輸入(hd2一直提示找不到硬盤,不論是用fdisk –l查看還是查看/ect/fstab都發現存在着/dev/sdc1,輸入(hd後按TAB鍵顯示如下:
grub> root (hd
 Possible disks are:  hd0 hd1
網上也沒有人出現類似的情況,然後胡亂看到/boot/grub/ device.map,內容如下:
development:/boot/grub # cat device.map
(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb
於是在其末尾添加一行,搞定
(hd2)   /dev/sdc
4. 編寫grub.conf
# cat grub/grub.conf
#write
#
#
timeout=5
title *******westone linux 2.6.38.4*******
root (hd0,0)
kernel /bzImage console=ttyS0,115200 root=/dev/ram0
    initrd /ramdisk.gz

5. # cp /mnt/grub/grub.conf /mnt/grub/menu.lst
注:
網上搜下grub.conf是menu.lst的鏈接,在只有grub.conf的情況下我的CF卡掛在設備上是起不來的,但是通過鍵盤和顯示器,在grub提示符下輸入configure /grub/grub.conf系統啓動正常。所以做了個拷貝的操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章