准备工作
需要准备的工具
工具 | 描述 | 使用方法 | Web |
---|---|---|---|
busybox-1.29.3.tar.bz2 | UNIX实用程序集合 | 开始 | 下载 |
install-devel-packages.sh | 基本1:Ubuntu12.04库文件安装脚本 | 使用 | 浏览 |
update_gcc.txt | 基本2:gcc降级命令 | 使用 | 浏览 |
arm-2009q3.tar.bz2 | 基本3:交叉编译器 | 安装 使用 | 下载 |
make | 基本4:make3.8.1执行Makefile的工具 | 使用 | 自带 |
mkfs_2tools.tgz | 2个打包工具,mkimage、make_ext4fs | 安装 使用 | 下载 |
最小系统需要准备的文件
以下文件打包下载:最小系统需要的文件
脚本 | 存放目录 | 设置权限 | Web |
---|---|---|---|
profile | /etc/ |
755 | 浏览 |
passwd | /etc/ |
755 | 浏览 |
eth0-setting | /etc/ |
755 | 浏览 |
rcS | /etc/init.d/ |
755 | 浏览 |
ifconfig-eth0 | /etc/init.d/ |
755 | 浏览 |
netd | /etc/rc.d/init.d/ |
755 | 浏览 |
烧写系统需要准备的文件
系统文件的烧写参见这篇文章:如何烧写到iTop4412
以下Web文件是一套适配好的最小linux系统,适合2G内存SCP的iTop4412:
烧写时,system.img文件使用我们自己生成的,其他用下载的。
文件 | 类型 | 注释 | Web |
---|---|---|---|
u-boot-iTOP-4412.bin | bootloader | uboot | 下载 |
zImage | kernel | 内核,包括驱动 | 下载 |
ramdisk-uboot.img | ramdisk | 虚拟内存盘,放文件系统init相关脚本 | 下载 |
system.img | system | 文件系统,大小限制这里放最小linux | 下载 |
开始
创建根文件系统该有的目录
-
首先创建工作目录
mkdir rootfs
,也就是最小系统的根目录。 -
在rootfs目录下创建该有的空目录:
-
创建一级目录
1
mkdir dev etc lib mnt proc sys tmp var
bin/
、sbin/
、usr
目录是由BusyBox创建再拷贝过来,所以这里先不创建; -
创建二级及以下目录
1 2
mkdir -p etc/init.d etc/rc.d etc/rc.d/init.d mkdir -p var/lib var/lock var/log var/run var/tmp
-
完成后在rootfs目录下使用tree看下文件夹结构,其中还需要bin/
、sbin/
和usr/
目录:
使用BusyBox构建bin、sbin、usr目录以及linuxrc文件
进行此步前确保交叉编译器安装ok,如未安装,点这里安装。
-
获取BusyBox源码
-
拷贝到Ubuntu中并解压
1
tar -vxf busybox-1.29.3.tar.bz2
-
进入解压目录,使用
make menuconfig
修改编译配置,或者直接修改Makefile文件make menuconfig
界面如下:-
配置编译器:进入界面“Settings”→“Build Optiions”→“Cross Compiler prefix”将 其配置为
arm-none-linux-gnueabi-
(或者Makefile修改 CROSS_COMPILE 变量值为
arm-none-linux-gnueabi-
) -
(可选)配置导出目录:进入界面“Settings”→“Installation Options”→“Destination path”发现默认是
./_install
。编译完成后,执行make install
进行导出。因为我们的目的是拷贝生成的目标到其他文件夹,因此这里就用默认的即可。
退出并保存,然后再执行
make menuconfig
使用/
搜索ARCH,发现值为arm就ok了(存在根据编译器名称自动变更ARCH值的机制),否则需要手动修改Makefile中的ARCH为ARCH ?= arm
紧接着进行其他配置,如静态编译等,按照下面清单进行更改:
-
-
执行命令
make
,编译BusyBox第一次执行会发现有6个警告、2个找不到定义的错误,错误如下:
忽略警告。2个错误的解决:直接屏蔽这两个模块(NSENTER和SYNC)。故执行
make menuconfig
取消这两个模块的编译,建议/
找到模块路径进行屏蔽,结果如下:进入路径屏蔽后保存退出,再次执行
make
,发现编译通过。 -
执行命令
make install
进行导出文件执行后即可发现
_install/
文件夹下面会生成4个文件夹/文件,这些全都是我们需要的。
完善最小Linux系统的文件
进行此步前,确保所需文件已经准备ok,见这里
-
【程序文件】进入BusyBox导出目录,将
bin/
、sbin/
、usr/
目录以及linuxrc
文件拷贝到最小Linux根目录1
cp -ra bin/ sbin/ usr/ linuxrc ~/rootfs/
其中的
~/rootfs
是我们创建好的最小linux根目录。 -
【配置文件】进入最小linux根目录,按照下列步骤拷贝文件
-
进入
etc/
目录将eth0-setting、passwd、profile三个文件拷贝进去,将文件的权限改为755
-
进入
etc/init.d
目录将ifconfig-eth0、rcS两个文件拷贝进去,将文件的权限改为755
-
进入
etc/rc.d/init.d
目录将netd文件拷贝进去,将文件的权限改为755
完成后,etc目录的结构如下:
-
-
【库文件】进入
lib/
目录,将编译器的库文件拷贝进去1
cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* ./
打包最小Linux系统
进入最小linux根目录的上级目录,执行:
这里填写的Size是300M,建议略小于System分区大小。了解分区命令
1
make_ext4fs -s -l 300M -a root -L linux system.img rootfs
烧录最小Linux系统
烧录详细方法参见这篇文章:如何烧写到iTop4412
打包步骤中设置Size为300M,烧录前分区时分给Systtem分区≥300M即可,一般就执行缺省分区,默认值在uboot/common/cmd_mmc_fdisk.c
的SYSTEM_PART_SIZE宏中定义,目前默认值是1024M。其他按照烧录教程中进行即可。
烧录完成后,效果如图: