linux初学-内核编译以及文件系统3

 

linux初学-内核编译以及文件系统3

 

 

以上2篇小结介绍了内核编译以及烧写,那么linux系统运行起来还需要文件系统的支持。我在这边就把我做的文件系统的移植以及busybox的编译介绍给大家。可能存在一些错误,还请大家指教指教:

 

 

 

Busybox已经有很多版本了,现在最新的版本是 1.4.1 版本。但是要注意的一点是,busybox的各个版本在编译的时候与交叉编译器的库版本是有很大关联的。比如1.4.1版本的busyboxarmlinuxgcc3.4.1版本的编译的话,存在很多问题。特别是在编译

 

Linux Module Utilities>

 

[ ] insmod

 

[ ] rmmod

 

[ ] lsmod

 

[ ] modprobe

 

等选项的时候,要编译 1.4.1 版本,就必须将gcc的库更新,但是由于工作时间的限制,本人也暂时未能找到相关的库进行编译1.4.1版本。

 

 

 

参考了网上人家的资料以及建议,本人现在采用busybox 1.2.2 版本,交叉编译器为armlinux3.4.1

 

Make menuconfig

 

Busybox配置如下:

 

Busybox Settings >

 

General Configuration >

 

[*] Support for devfs   /* 这个选项在 1.0.0 版本上有,在1.2.2版本上已经取消了 */

 

 

Build Options >

 

[*] Build BusyBox as a static binary (no shared libs)

 

[*] Do you want to build BusyBox with a Cross Compiler?

 

(/usr/local/arm/ 3.4.1 /bin/armlinux)

 

/* 该交叉编译路径的修改在Config.in文件301 */

 

Init Utilities >

 

 

 

[*] init

 

[*] Support reading an inittab file

 

/* 支持init读取/etc/inittab配置文件,一定要选上 */

 

Shells >

 

Choose your default shell (ash) >

 

/* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件

 

* 看看我们前头的linuxrc脚本的头一句:

 

* #!/bin/sh 是由bin/sh来解释执行的

 

*/

 

[*] ash

 

Coreutils >

 

[*] cp

 

[*] cat

 

[*] ls

 

[*] mkdir

 

[*] echo (basic SuSv3 version taking no options)

 

[*] env

 

[*] mv

 

[*] pwd

 

[*] rm

 

[*] touch

 

Editors >

 

[*] vi

 

Linux System Utilities >

 

[*] mount

 

[*] umount

 

[*] Support loopback mounts

 

[*] Support for the old /etc/mtab file

 

 

    /* 注意不要选择支持2.4内核,选上的话,会出现编译错误 */

 

 

 

编译make

 

安装make install  /* 这个时候在目录下可以看见_install目录,该目录就是我们所需要的 */

 

创建linuxrc文件

 

内容如下:

 

$ vi  linuxrc

 

#!/bin/sh

 

 

 

echo "Hello linux !!!"

 

 

 

exec /sbin/init

 

然后修改权限:chmod 775 linuxrc

 

 

 

 

 

制作根文件系统:

 

1)创建目录结构

 

# cd /work/fs

 

# mkdir dev etc lib mnt proc usr

 

2)创建设备节点

 

# cd /work/fs/dev

 

# mknod console c 5 1

 

# mknod full c 1 7

 

# mknod kmem c 1 2

 

# mknod mem c 1 1

 

# mknod null c 1 3

 

# mknod port c 1 4

 

# mknod random c 1 8

 

# mknod urandom c 1 9

 

# mknod zero c 1 5

 

# for i in `seq 0 7`; do (特别注意,不是单引号,而是TAB健上边那个,下同)

 

# mknod loop$i b 7 $i

 

# done

 

# for i in `seq 0 9`; do

 

# mknod ram$i b 1 $i

 

# done

 

# ln -s ram1 ram

 

# mknod tty c 5 0

 

# for i in `seq 0 9`; do

 

# mknod tty$i c 4 $i

 

# done

 

# for i in `seq 0 9`; do

 

# mknod vcs$i b 7 $i

 

# done

 

# ln -s vcs0 vcs

 

# for i in `seq 0 9`; do

 

# mknod vcsa$i b 7 $i

 

# done

 

# ln -s vcsa0 vcsa

 

3)添加busybox的应用程序

 

 cp –af  …./busybox 1.2.2 /_install/*  /mnt/new_disk

 

(4) 添加系统文件以及库文件

 

# cp a ./rootfs/etc/* ../fs/etc

 

# cp a ./rootfs/lib/* ./fs/lib

 

   5)制作ramdisk

 

    # mkdir /mnt/initrd

 

# dd if=/dev/zero of=K92.img bs=1k count=8192

 

# mkfs.ext2 F K92.img

 

# mount o loop K92.img /mnt/initrd

 

# cp a ./fs/* /mnt/initrd

 

# mount /mnt/initrd

 

# gzip –c –v9 K92.img > K92.img.gz

 

 

 

(5)配置应用程序自动启动

 

我们采用的是busybox进行启动,busybox会在linux内核刚刚完成加载后就立即进行启动,此后busybox会跳转到它自己的init进程开始执行:

 

init进程设置信号处理进程

 

对控制台进行初始化

 

解西inittab文件 /etc/inittab

 

在默认情况下,busybox会运行系统的初始化脚本/etc/init.d/rcS

 

运行导致init暂停的inittab命令

 

运行仅执行一次的inittab命令

 

所以我们在配置应用程序自动运行的情况下,就可以通过修改初始化脚本/etc/init.d/rcS来达到这个目的;

 

例如:

 

#/bin/sh

 

/bin/mount –a

 

/sbin/route del default

 

/sbin/route add default gw 192.168.10.1

 

/linuxrc

/start-hello   /* 自动运行的应用程序 */

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值