[原创] 利用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

 

 

 

 

 

你可能感兴趣的:(Linux移植笔记)