Linux / 嵌入式 · 2021-12-02

海思Hi3519A制作根文件系统

一、配置,编译,安装BUSYBOX

1.1 配置BUSYBOX

①进入busybox所在目录,指定配置文件

cd Hi3516A_SDK_V1.0.5.0/osdrv/opensource/busybox/busybox-1.20.2
cp config_v300_soft .config
  • 1
  • 2

在这里插入图片描述
②通过”make menuconfig”配置选项

make menuconfig
  • 1

busybox 的配置界面和内核配置相似,其功能选项容易理解,可以根据自己的需求选择配置。

在 Busybox Settings —> Build Options 中注意下面两个选项:

[*]Build BusyBox as a static binary (no shared libs)
[*] Build with Large File Support (for accessing files > 2 GB)
  • 1
  • 2

第一个选项 选择是否把 busybox 编译成静态链接的可执行文件。如果选择该选项,编译出来的 busybox 就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项将得到动态链接的 busybox,体积较小,但需要动态库的支持。

第二个选项 是用于选择 SDK 推荐的交叉编译器,配置好后保存并退出。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
欲了解 busybox 各选项含义请参考 busybox 配置帮助。

③手动修改Makefile

vim Makefile

164 CROSS_COMPLE=armhisiv300-linux-  //指定编译工具链
190 ARCH=arm  //arm体系架构
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

1.2 编译和安装BUSYBOX

配置好busybox后,输入以下命令进行编译和安装

make
make install
  • 1
  • 2

编译并成功安装后,在busybox目录下的_install目录生成以下目录及文件

drwxr-xr-x 2 root root 4096 227 14:53 bin
lrwxrwxrwx 1 root root   11 227 14:53 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 227 14:53 sbin
drwxr-xr-x 4 root root 4096 226 17:26 usr

  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

二、使用BUSYBOX制作根文件系统

在成功安装 SDK 后,Hi3516A_SDK_V1.0.5.0/package/目录中已经有制作好的根文件系统rootfs_uclibc.tgz
在这里插入图片描述
如有需要,也可在 busybox 的基础上制作根文件系统,步骤如下:

①创建rootbox目录,并将_intalll下的内容拷贝到rootbox中

mkdir rootbox
cd rootbox
cp -R ../_install/* .
mkdir etc dev lib tmp var mnt home proc
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
②配置etc lib dev 目录的必需文件

  • etc 目录可参考系统/etc 下的文件。其中最主要的文件包括 inittab、 fstab、 init.d/rcS文件等,这些文件最好从busybox 的 examples 目录下拷贝过来,根据需要自行修改。
  • dev 目录下的设备文件,可以直接从系统中拷贝过来或者使用 mknod 命令生成需要的设备文件。拷贝文件时请使用 cp –R file。
  • lib 目录是存放应用程序所需要的库文件,根据应用程序需要拷贝相应的库文件。

完成以上两个步骤,一个完整的根文件系统就生成了

注:SDK 软件包中已经包括配置好的完整的根文件系统,如果无特别需求,可直接使用。要添加自己开发的应用程序,只需将应用程序和相应的库文件拷贝到根文件系统的对应目录即可。

 

 

 

 

参考海思官方文档:《Hi3519AV100╱Hi3556AV100 开发环境用户指南.pdf》

1、进入busybox目录,解压busybox源代码包

 

cd osdrv/opensource/busybox/
tar -xvf busybox-1.26.2.tgz
2、配置busybox

 

# 引入交叉编译相关环境变量
source /etc/profile
# 配置busybox
cd busybox-1.26.2/
cp config_arm_himix200_a53_softfp_neon .config
make menuconfig
# 重点检查Busybox Settings ---> Build Options中交叉编译器的相关配置
# (arm-himix200-linux-) Cross Compiler prefix
# 其它配置项未修改,暂时保持默认
3、编译安装busybox

编译并安装成功后的busybox在_install目录

 

make
make install
4、制作根文件系统

 

mkdir rootfs
cd rootfs/
cp -R /home/hisilicon/3519A/Hi3519AV100_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/_install/* .
mkdir etc dev lib tmp var mnt home proc

# 拷备linuxrc所依赖的库文件,linuxrc是一个链接文件,指向bin/busybox
# 如果不拷备依赖库文件,启动时会报错:Kernel panic - not syncing: Requested init /linuxrc failed (error -2).  
# 拷备并创建ld-linux.so.3的软链接后仍然会报错:/linuxrc: error while loading shared libraries: libm.so.6: cannot open shared object file: No such file or directory                                            
# Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
# 报错的原因是lib库文件的目录结构和交叉编译器中的目录结构不一致,解决的办法有两个:
# 1、在rootfs的lib目录建立a53_softfp_neon-vfpv4的软链接,使 a53_softfp_neon-vfpv4 -> ../lib/,并在lib目录创建ld-linux.so.3的软链接 ld-linux.so.3 -> ld-2.24.so*
# 2、在rootfs的lib目录建立a53_softfp_neon-vfpv4目录,将lib库文件拷备至此目录下,并在lib目录创建ld-linux.so.3的软链接 ld-linux.so.3 -> a53_softfp_neon-vfpv4/ld-2.24.so*
# 本文采用方法2,保持rootfs的lib库文件的目录结构和交叉编译器中的目录结构一致
cd lib
mkdir  a53_softfp_neon-vfpv4
cp -R /opt/hisi-linux/x86-arm/arm-himix200-linux/target/lib/a53_softfp_neon-vfpv4/* .
cd ..
ln -s a53_softfp_neon-vfpv4/ld-2.24.so ld-linux.so.3

  • etc目录可参考系统/etc 下的文件。其中最主要的文件包括inittab、fstab、init.d/rcS
    文件等,这些文件最好从busybox 的examples目录下拷贝过来,根据需要自行修
    改。
  • dev目录下的设备文件,可以直接从系统中拷贝过来或者使用mknod命令生成需
    要的设备文件。拷贝文件时请使用cp –R file。
  • lib 目录是存放应用程序所需要的库文件,请根据应用程序需要拷贝相应的库文
    件。
5、生成根文件系统镜像文件

前期使用NFS启动测试,暂时未测试