linux将程序封装成内核模块,Linux01-Linux自定义内核及busybox完成系统定制52

一、Busybox

1、介绍:BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士***。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了Android 系统的自带的shell。

2、官网:http://www.busybox.net/

它是一个二进制程序

二、查看硬件信息

1、cat /proc/cpuinfo 查看cpu信息

2、lsusb 列出本机USB信息

3、lspci 列出pci总线的所有设备

4、hal-device 硬件抽象层(Hardware Abstract Layer)

三、如何实现编译部分内核

1、只编译某子目录下的相关代码:make dir/subdir (目录和子目录)

make arch/ (不包括模块的内核核心)

2、只编译部分模块:make M=drivers/net/

make drivers/net/ (只编译和网络相关的信息)

3、只编译某一模块:make drivers/net/pcnet32.ko

4、将编译完成的结果放置于别的目录中:

make O=/tmp/kernel

5、交叉编译:make ARCH=

四、如何编译安装Kernel+busybox系统

1、首先安装图形开发库Development Libraries和Development Tools

# yum groupinstall "Development Tools" "Development Libraries"

2、准备IDE硬盘的2个磁盘

/dev/hda1:格式化为ext3-->挂载到/mnt/boot

/dev/hda2:格式化为ext3-->挂载到/mnt/sysroot/

3、下载busybox源码包busybox-1.20.2.tar.bz2

4、解压缩tar xf busybox-1.20.2.tar.bz2

5、编译busybox:

cd busybox-1.20.2

make menuconfig

选择Busybox Settings-->Build Options-->Build BusyBox as a static binary (no shared libs)选中为*

Busybox Settings-->Installation Options (”make install“ behavior)-->查看到安装busybox的位置

保存退出;

6、编译安装busybox

cd busybox-1.20.2

make install(编译过程可能会报错,因为最新的busybox需要最新内核的头文件,此时下载新内核linux-2.6.38.5.tar.bz2)

7、下载的内核版本,解压缩

tar xf linux-2.6.38.5.tar.bz2 -C /usr/src

8、切换到新内核的头文件目录

cd /usr/src/linux-2.6.38.5/include/mtd

9、复制新内核的头文件ubi-user.h到/root/busybox-1.20.2/include/mtd目录下:

mkdir /root/busybox-1.20.2/include/mtd

cp /usr/src/linux-2.6.38.5/include/mtd/ubi-user.h /root/busybox-1.20.2/include/mtd

10、重新编译安装busybox

cd /root/busybox-1.20.2

make install(编译完成后,会在/root/busybox-1.20.2下生成_install文件,即是busybox的安装位置)

11、复制编译安装busybox配置文件_install,做为文件系统的一部分:

cp _install /tmp/busybox -a

cd /tmp/busybox

删除链接文件:rm linuxrc

12、创建必要的文件系统目录:

mkdir proc etc dev lib/modules mnt/sysroot sys -pv

13、复制Busybox的ext3文件系统所需要的模块:

modinfo ext3(查看ext3依赖文件路径)

modinfo jbd(查看ext3依赖文件路径)

cp /lib/modules/`uname -r`/kernel/fs/jbd/jbd.ko /tmp/busybox/lib/modules

cp /lib/modules/`uname -r`/kernel/fs/ext3/ext3.ko /tmp/busybox/lib/modules

14、编辑init脚本:

vim /tmp/busybox/init

#!/bin/sh  -->目前busybox只有sh环境

#

mount -t proc proc /proc

mount -t sysfs sysfs /sys

insmod /lib/modules/jbd.ko

insmod /lib/modules/ext3.ko

mdev -s  -->扫描busybox的硬件设备,此时从/tmp/busybox/sbin/mdev可看出(RedHat中扫描设备的命令是udev)

mount -t ext3 /dev/hda2 /mnt/sysroot

exec switch_root /mnt/sysroot /sbin/init

添加init脚本执行权限:chmod +x init

15、创建2个必要的设备文件:

mknod dev/console c 5 1

mknod dev/null c 1 3

16、封装initrd文件到/dev/hda1:

find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz

17、复制内核文件到/dev/hda1:

cp /boot/vmlinuz-·uname -r· /mnt/boot/vmlinuz

18、安装grub到/dev/hda设备:

grub-install --root-directory=/mnt /dev/hda

ls /mnt/boot/

19、编辑grub文件:

vim /mnt/boot/grub/grub.conf

defualt=0

timeout=3

title MageEdu Linux

root(hda0,0)

kernel /vmlinuz ro root=/dev/hda2

initrd /initrd.gz

查看grub文件:ls /mnt/boot/

20、创建/dev/hda2所需要的sysroot文件:

cd /root/busybox-1.20.2

cp _install/* /mnt/sysroot/ -a

cd /mnt/sysroot

ls

rm linuxrc

21、创建/dev/hda2必要的根文件:

mkdir proc sys dev tmp var/{log,lock,run} lib/modules etc/rc.d/init.d root boot mnt media -pv

ls

ls sbin/(查看sbin下是否有init等)

22、在创建系统初始化配置文件inittab(busybox支持的文件系统的配置文件和RedHat有差异)

vim etc/inittab

::sysinit:/etc/rc.d/rc.sysinit

console::respawn:-/bin/sh

::ctlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

23、为系统准备“文件系统表”配置文件/etc/fstab

vim etc/fstab

sysfs/syssysfsdefaults00

proc/procprocdefaults00

/dev/hda1/boot ext3defaults00

/dev/hda2/ext3defaults11

同步到磁盘:sync

24、为/dev/hda2文件系统创建2个设备(主次设备号是事先注册好的)

mknoddev/console c 5 1

mknod dev/null c 1 3

25、建立/dev/hda2文件系统初始化脚本文件:

vim etc/rc.d/rc.sysinit

#!/bin/sh

echo -e "\\tWelcome to \\033[34mMage \\033[0m Linux."

echo -e "Remounting the root filesystem .........[ \\033[32mOK\\033[0m ]"

mount -t proc proc /proc

mount -t sysfs sysfs /sys

mount -o remount,rw /

echo -e "Creating the files of device ............[ \\033[32mOK\\033[0m ]"

mdev -s

echo -e "Mounting the filesystem .................[ \\033[32mOK\\033[0m ]"

mount -a

swapon -a

添加脚本执行权限:chmod +x etc/rc.d/rc.sysinit

26、sync(同步数据到磁盘)

27、新建主机,挂载刚刚第一步我们添加的硬盘,开始启动系统(宿主机关机)。

28、系统启动后,开始测试busybox封装的Linux小系统的功能:

ls

fdisk -l

mkswap /dev/hda3

swapon /dev/hda3

free -m 等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值