详解基于BusyBox、DropBear、Ngnix制作完整的嵌入式(2)

说明:
1、 此处需要选择 Busybox Settings --> Build Options --> Build BusyBox as a static binary (no shared libs),这样可以把Busybox编译成一个不使用共享库
的静态二进制文件,从而避免了对宿主机的共享库产生依赖,但你也可以不选择此项,而完成编译后把其依赖的共享库复制至目标系统上的/lib目录中即可;

2、 修改安装位置为/mnt/sysroot;方法为:Busybox Settings --> Installation Options --> (./_install) BusyBox installation prefix,
修改其值为/mnt/sysroot,默认安装在当当前目录,其命名为_install

说明:安装后的文件均位于/mnt/sysroot目录中,但为了创建initrd(虚拟根文件系统),并实现让其启动以后将真正切换至目标系统分区上的rootfs,
这里我们创建个临时目录(/tmp/busybox)使用,
# mkdir -pv /tmp/busybox ##创建临时目录,用于制作虚拟根文件系统
# cp -r /mnt/sysroot/* /tmp/busybox -a
# cd /tmp/busybox ##进入临时目录将linuxrc链接文件删除
# mkdir proc sys etc dev mnt/sysroot tmp lib/modules -pv
# vim init
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
mount -t ext3 /dev/hda2 /mnt/sysroot
exec switch_root /mnt/sysroot /sbin/init
:wq
# chmod +x init



3、创建两个必要的设备文件:
# mknod dev/console c 5 1
# mknod dev/null c 1 3

4、制作initrd
# find . | cpio --quiet -H newc -o | gzip -9 -n > /mnt/boot/initrd.gz

5、建立真正根文件系统(rootfs)
# cd /mnt/sysroot
# mkdir -pv proc sys etc/rc.d/init.d tmp dev/pts boot var/log usr/lib
# mknod dev/console c 5 1
# mknod dev/null c 1 3
# vim etc/rc.d/init.d/functions ##定义函数用于其它脚本调用(内容如下:)
#!/bin/bash
A=`stty -F /dev/console size &>/dev/null` ##显示的是我们终端支持横和列,默认(25 80)
lie=${A#* }
[ -z $lie ] && lie=80
space=$[$lie-14]

RED='\033[31m'
GREEN='\033[32m'
NORMAL='\033[0m'
success() {
string=$1
RT_SPA=$[$space-${#string}]
echo -n "$string"
for I in `seq 1 $RT_SPA`;do
echo -n " "
done
echo -e "[ ${GREEN}OK${NORMAL} ]"
}
failure() {
string=$1
RT_SPA=$[$space-${#string}]
echo -n "$string"
for I in `seq 1 $RT_SPA`;do
echo -n " "
done
echo -e "[ ${RED}FAILED${NORMAL} ]"
}
:wq
# chmod +x etc/rc.d/init.d/functions
创建系统初始化rc.sysinit脚本
# vim etc/rc.d/rc.sysinit
#!/bin/bash
echo -e "\tWelcome to \033[31mMageEdu\033[0m Linux"
. /etc/rc.d/init.d/functions ##读取functions函数到etc/rc.d/rc.sysinit
success "Remounting the root filesystem ..."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -o remount,rw /

mdev -s
success "Creating the files of device ..."

mount -a
swapon -a
success "Mounting the filesystem ..."

syslogd
klogd
success "Starting the log daemon ..."

ifconfig lo 127.0.0.1/24
ifconfig eth0 172.16.100.9/16
success "Configuring loopback interface ..."
:wq
# chmod +x etc/rc.d/rc.sysinit

6、配置init及其所需要inittab文件
# cd /tmp/busybox
# rm -f linuxrc
# vim etc/inittab
添加如下内容:
::sysinit:/etc/rc.d/rc.sysinit
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
:wq

7、为系统准备一个“文件系统表”配置文件/etc/fstab
# vim etc/fstab
添加如下内容:
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/hda1 /boot ext3 defaults 0 0
/dev/hda2 / ext3 defaults 1 1
:wq


8、下面就可以为系统创建所需的引导程序grub了
# grub-install --root-directory=/mnt /dev/hda

9、为grub建立配置文件,让系统引导grub所定义的配置文件:
# vim /mnt/boot/grub/grub.conf
添加如下内容:(这里只做了简单的定义)
default=0 ## 设定默认启动的title的编号,从0开始
timeout=3 ## 等待用户选择的超时时长,单位是秒
title MyLinx system (2.6.38.5) ## 内核标题,或操作系统名称,字符串,可自由修改
root (hd0,0) # 内核文件所在的设备;对grub而言,所有类型硬盘一律hd,格式为(hd#,N);hd#, #表示第几个磁盘;最后的N表示对应磁盘的分区;
kernel /bzImage ro root=/dev/hda2 quiet # 内核文件路径,及传递给内核的参数
initrd /initrd.gz ##这是我们给予busybox制作的虚拟根文件系统
:wq

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20005.html