迅为4412学习笔记——编译安装最小Linux文件系统

实验环境:物理机Ubuntu20.04/Windows 10 21H2

1. 制作并安装最小linux文件系统

1.1 编译uboot

将如下三个文件夹拷贝至Ubuntu同一级目录下:

 

拷贝完成后,如图所示:

 

使用如下命令解压uboot源码:

tar -vxf iTop4412_uboot_20180320.tar.gz

解压完成后如图所示:

 

可以通过使用iTop4412_uboot源码文件夹内的”build_uboot.sh”脚本来编译uboot源码,编译时有如下几个参数需要根据板子型号进行设定:

硬件分类

脚本执行参数

核心板SCP,1G内存

SCP_1GDDR

核心板SCP,2G内存

SCP_2GDDR

核心板POP,1G内存

POP_1GDDR

核心板POP,2G内存

POP_2GDDR

笔者使用的开发板是核心板SCP且为1G内存,因此编译的时候使用的参数为”SCP_1GDDR”,进入到iToop4412_uboot目录下,使用如下命令完成uboot的编译:

./build_uboot.sh SCP_1GDDR

编译完成后如图所示

 

编译生成的u-boot-iTop-4412.bin文件就在iTop4412_uboot目录下,如图所示:

 

 

1.2 编译linux内核

先将iTop4412_Kernel_3.0_20191007.tar.gz内核源码拷贝至Ubuntu中,如图所示

 

然后使用如下的命令进行解压缩:

tar -vxf iTop4412_Kernel_3.0_20191007.tar.gz

解压完成后如图所示:

 

然后进入到”iTop4412_Kernel_3.0”目录下,进行编译内核的配置。

 

假如需要为最小linux系统编译内核,那么需要选择config_for_linux*的配置文件,如果是为安卓编译内核,则选择config_for_android*即可其他系统也类似,其中elite表示精英版,super表示全能版。

以编译最小linux系统所需的内核为例,由于笔者使用的是SCG1G的精英版,因此需要使用如下命令来配置.config文件:

cp config_for_linux_scp_elite .config

完成后,使用如下命令即可编译内核:

make zImage

实测Ubuntu20.04 LTS系统在编译时会遇到版本问题而产生的错误,如图

 

解决方法:根据error出错目录,找到timeconst.pl文件,进入找到defined(@array)这句,根据括号内提示,忽略defined,将:

if (!defined(@val)) {

改为:

if (!(@val)) {

详细过程如下,在iTop4412_Kernel_3.0内核目录中,使用如下命令对timeconst.pl文件进行编辑:

vim /kernel/timeconst.pl

然后跳转到出错的行数,这里为373,在vim中使用如下命令即可跳转:

373gg

跳转完成后如图所示:

 

修改后如图所示:

 

然后保存退出,重新编译,编译完成后如图所示:

 

生成的zImage文件在./arch/arm/boot目录下,如图所示

 

1.3 下载并配置Busybox

可以通过使用Busybox开源工具箱来完成对最小linux文件系统的制作,Busybox是一个集成了一百多个最常用linux命令和工具的软件,包含常用的shell命令,其官网为:

https://busybox.net/

打开官网,如图所示,目前最新版为1.35.0

 

下载完后,复制到Ubuntu,如图所示:

 

使用如下命令进行解压:

tar -vxf busybox-1.35.0.tar.bz2

解压完成后如图所示

 

进入到解压生成的busybox-1.35.0目录,然后使用如下命令

make menuconfig

可以对linux文件系统进行配置,实测Ubuntu20.04 LTS会弹出如下错误:

 

这是因为Ubuntu系统缺少一个套件ncurses devel,使用如下命令进行安装即可:

apt install libncurses5-dev

完成后,再次使用make menuconfig就能进入buybox的菜单配置界面了,如图所示

 

随后,进入Settings目录,往下翻,找到”---Build Options”下的”Cross compiler prefix”,来为其配置交叉编译器。

 

这里以前面安装的”arm-none-linux-gnueabi-”交叉编译器为例,回车进入”Cross compiler prefix”后,在编辑框输入”arm-none-linux-gnueabi-”,然后选择”OK”确定,如图所示:

 

接下来为Busybox配置文件系统安装目录,默认为当前文件夹的”_install”目录,如图所示:

 

这里在busybox-1.35.0目录外建立一个filesystem目录,用于busybox安装文件系统,这样需要将”./_install”修改为”../filesystem”,如图所示:

 

然后选择”Ok”并保存退出,如图所示,选择”Yes”。

 

1.4 完善最小linux文件系统

如图所示,在busybox-1.35.0的同级目录建立filesystem目录。

 

然后,在filesystem中完善最小linux系统所需要的文件,具体如下:

在filesystem中使用如下命令建立一系列文件夹:

mkdir dev etc lib mnt proc sys tmp var

完成后如图所示

 

然后,进入新创建的etc目录,使用如下命令建立init.d和rc.d文件夹

mkdir init.d rc.d

完成后如图所示:

 

再进入到新创建的rc.d文件夹,使用如下命令创建init.d文件夹

mkdir init.d

完成后如图所示:

 

然后再返回到filesystem目录下,进入var目录,使用如下命令在其中建立其他系统需要的文件夹:

mkdir lib lock log run tmp

完成后如图所示:

 

以下操作需要用到一些迅为提供的初始化文件,如图所示,解压后避免在windows中打开。

 

进入创建的etc目录,将eth0-setting passwd profile三个文件拷贝进去,并使用如下命令将这些文件的权限改为755:

chmod 755 eth0-setting passwd profile

完成后如图所示:

 

进入etc目录下的init.d目录,将ifconfig-eth0和rcS两个文件拷贝进去,并使用如下命令将这些文件的权限改为755:

chmod 755 ifconfig-eth0 rcS

完成后如图所示:

 

进入到etc/rc.d/init.d目录下,将netd文件拷贝进去,使用如下命令将文件的权限改为755:

chmod 755 netd

完成后如图所示:

 

返回到system目录下,进入lib文件夹下,使用如下命令将编译器的库文件拷贝进去:

cp /usr/local/arm/arm-2009q3/arm-none-linux-guneabi/libc/lib/* ./

完成后如图所示:

 

这样最小linux系统的文件系统就已经完善了。

1.5 编译最小linux文件系统

进入busybox-1.35.0目录下,依次使用如下命令,来完成最小linux系统的编译与安装:

make

make install

实测使用make命令后,Ubuntu20.04 LTS系统会出现如下错误:

 

使用如下命令编辑ipaddress.c这个文件:

vim networking/libiproute/ipaddress.c

然后跳转到345行,如图所示:

 

为IFA_F_DADFAILED添加条件编译,程序修改为:

 

保存退出后,重新编译,发现有新的报错,这些错误主要是交叉工具链与源码版本不匹配导致的,在busybox的配置中去掉那些未定义的模块即可。

 

这里有两个,分别是nsenter和sync,在busybox的make menuconfig中输入”/”可以对模块进行搜索,以获取其位置,然后去掉选中状态即可。

以下是搜索nsenter的结果,可以获取其位置为Linux System Utilities

 

找到并选中后,键盘输入“n”即可去掉选中状态,输入“y”则为选中状态。

 

继续查找sync

 

其在Coreutils菜单下,同样进行去除选中操作:

 

最后保存退出,重新使用make编译。

 

编译通过了,最后使用如下命令,完成对busybox的安装:

make install

成功后结果如图所示:

 

1.6 打包最小linux文件系统

在执行上述busybox编译与安装的命令后,使用make_ext4fs打包工具,将linux_tools.tgz压缩文件拷贝至”/”目录下。

  然后使用如下命令解压:

tar -vxf linux_tools

完成后如图所示:

 

之后,进入到前面的filesystem同级目录,使用如下命令来对最小linux文件系统进行打包:

make_ext4fs -s -l 314572800 -a root -L linux system.img filesystem

其中最后一个参数filesystem表示文件系统模板所在目录,即前面完善的linux文件系统,倒数第二个参数system.img表示打包后生成的文件名为system.img。

实测该命令在Ubuntu 20.04 LTS系统下会报错,提示加载共享库libc++.so.6时出错

 

只需要使用如下命令安装lib32c-dev和lib32stdc++6这两个库即可:

apt install lib32c-dev

apt install lib32stdc++6

安装完成后,再次使用打包命令,就打包生成了系统镜像文件system.img,如图所示:

 

1.7 烧写最小linux文件系统

在HyperTerminal(或minicom)中u-boot模式下使用(如果只需要更新内核,则可以不擦除分区),擦除分区,并进入fastboot模式

(一条一条命令执行)

fdisk -c 0

fatformat mmc 0:1

ext3format mmc 0:2

ext3format mmc 0:3

ext3format mmc 0:4

fast boot

cmd.exe下使用,通过otg线将所需镜像烧入开发板

一般情况下不重新烧写uboot(最小linux、android和QT共用一个uboot,第一项为烧写uboot)

fastboot.exe flash bootloader u-boot-iTOP-4412.bin

fastboot.exe flash kernel zImage

fastboot.exe flash ramdisk ramdisk-uboot.img

fastboot.exe flash system system.img

fastboot -w

fastboot reboot

烧写完成后,在开发板加载完内核后,使用如下命令可以查看busybox的版本:

ls -j

如图所示,表示busybox打包的系统能正常运行:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值