手动构建小于10M的类嵌入式Linux系统step by step实做指南

前提:
1、一个作为宿主机的Linux;本文使用的是Redhat Enterprise Linux 5.8;
2、在宿主机上提供一块额外的硬盘作为新系统的存储盘,为了降低复杂度,这里添加使用一块IDE接口的新硬盘;
3、Linux内核源码,busybox源码;本文使用的是目前最新版的 linux-4.0.4.tar.xz和busybox-1.23.2.tar.bz2
一、为系统上的新硬盘建立分区
这里根据需要先建立一个大小为100M的主分区作为新建系统的boot分区和一个512M的分区作为目标系统(即正在构建的新系统,后面将沿用此名称)的根分区;100M的分区格式化后将其挂载至/mnt/boot目录下;512M的分区格式化后将挂载至/mnt/sysroot目录;
说明:
1、此处的boot和sysroot的挂载点目录名称尽量不要修改,尤其是boot目录,否则必须保证后面的许多步骤都做了相应的改动;
2、新建系统的boot目录也可以跟根目录在同一个分区,这种方式比独立分区还要简单些,因此这里将不对此种方法再做出说明;

二、编译内核源代码
为新系统提供一个所需的内核(本例中的源代码包都位于/usr/src目录中)
这里写图片描述
然后下载ftp://172.16.0.1/pub/Sources/kernel/kernel-2.6.38.1-i686.cfg至当前目录中,并重命名为.config。

# make menuconfig

根据实际和规划选择所需要的功能;本实例计划制作一个具有网络的功能的微型linux且不打算使用内核模块,因此,这里选择把本机对应的网卡驱动直接编译进了内核。作者使用的是vmware Workstation虚拟机,所以,所需的网上驱动是pcnet32的,其它的均可按需要进行选择。选择完成后需要保存至当前目录下.config文件中。

# make  SUBDIR=arch/
# cp arch/x86/boot/bzImage  /mnt/boot
# make menuconfig

提示:为了实现后面的功能,请务必将文件系统中的ext3和网卡的驱动程序直接编译进内核;否则,就需要手动装载这些相关文件系统的模块;
三、编译busybox
这里写图片描述
这里写图片描述
这里写图片描述
安装出错,缺少新版内核头文件;下载目前最新版的 linux-4.0.4.tar.xz需要xz解压;编译安装xz解压工具xz-5.2.1.tar.bz2
这里写图片描述
C po 指定Makefile的搜索路径, update-po 表示执行这个目标
/tmp/xz-test/bin 添加到环境变量 PATH 中
这里写图片描述
将下载的kernel解压缩到/usr/src
这里写图片描述
复制/usr/src/linux-4.0.4/include/uapi/mtd下ubi-user.h到
/root/busybox-1.23.2/include/mtd
这里写图片描述
说明:
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(busyboxzi制作rootfs)。
这里写图片描述
这里写图片描述
编译安装成功,安装后的文件均位于/root/busybox-1.23.2/_install目录中(此练习我默认安装在_install下);
这里写图片描述
创建initrd,复制/root/busybox-1.23.2/_install下的内容到/tmp/busybox目录。但为了实现让其启动以后切换真正的文件系统至目标系统分区上的rootfs,还需要复制以上至目录/mnt/sysroot,以实现与真正的根文件系统分开制作。我们这里选择使用;
这里写图片描述
四、制作initrd
1、# cd /tmp/busybox;建立rootfs:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
5、为系统准备一个“文件系统表”配置文件/etc/fstab # vim etc/fstab
这里写图片描述
6、由于在rc.sysinit文件中启动了日志进程,因此系统在运行中会产生大量日志并将其显示于控制台;这将会经常性的打断正在进行的工作,为了避免这种情况,我们这里为日志进程建立配置文件,添加如下一行:*.info /var/log/messages
为其指定将日志发送至/var/log/messages文件;
这里写图片描述
这里写图片描述
六、创建引导程序
至此一个简易的基于内存运行的小系统已经构建出来了,我们接下来为此系统创建所需的引导程序# grub-install –root-directory=/mnt /dev/hda
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
七、添加用户帐号
接下来的这步实现为系统添加用户帐号(这里仍然基于宿主机实现)。
1、为目标主机建立passwd帐号文件group帐号文件shadow影子口令文件,这里采用直接复制宿主机的shadow文件中关于root口令行的行来实现
这里写图片描述
注:等目标主机启动时,root用户的口令也是宿主机的root用户的口令。您可以在目标主机启动以后再动手更改root用户的口令。
2、为目标主机建立passwd帐号文件修改如下内容:
这里写图片描述
十、在系统启动时为系统提供主机名称:
可以通过宿主机来实现,也可以直接在目标主机上进行配置。这里采用直接在目标主机上配置的方式
1、创建保存主机名称的配置文件
这里写图片描述
这里写图片描述
好了,接下来就可以测试验正登录和控制台切换的使用了。
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值