主要查阅第三部分前面,以及第四部分
一、 教程中的实战
1.1 解压rootfs
- 先解压rootfs
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub cp ../rootfs_scripts/rootfs.tgz ./ tar -xzvf rootfs.tgz mv ./rootfs ./rootfs_glibc
这个时候,在/etc的目录下,已经有相关的配置文件了
1.2 编译busybox
然后解压busybox
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox tar -xzvf busybox-1.26.2.tgz
进busybox里面去配置.config文件
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2 cp ./config_v200_a7_softfp_neon ./.config
执行menuconfig
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 menuconfig
这一步,其实也是在生成.config
一定要注意先load文件.config
然后什么都不做,然后退出
默认是不用做这一个步骤的编译的命令
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 MP_TYPE=smp BOOT_MEDIA=emmc OSDRV_CROSS_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -w" LIB_TYPE=glibc RUNTIME_LIB=runtime_glibc CROSS_SPECIFIED=y -j8
1.3 安装busybox
1.3.1 默认的安装方式
- 默认安装的命令
默认的脚本采用这种方式,但是实际上,一般不采用这种方式
这种默认安装方式放到的路径是./_installmake CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 MP_TYPE=smp BOOT_MEDIA=emmc OSDRV_CROSS_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -w" LIB_TYPE=glibc RUNTIME_LIB=runtime_glibc CROSS_SPECIFIED=y install
1.3.2 这次流程采用的安装方式
朱有鹏视频教程中主要采用这种安装方式:
首先配置menuconfig
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 menuconfig
然后一定要记得先load这个文件.config
选中Busybox Setting后回车
选中(./_install) BusyBox installation prefix后回车
然后填写路径:解压rootfs的路径
/home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
注意在删除已经填写的路径过程中,要按下Ctrl+Backspace才能正常删除
粘贴也是要按下Ctrl+鼠标右键Paste最后执行安装
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 MP_TYPE=smp BOOT_MEDIA=emmc OSDRV_CROSS_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -w" LIB_TYPE=glibc RUNTIME_LIB=runtime_glibc CROSS_SPECIFIED=y install
检验是否安装成功
就是查看bin目录下是否成功生成了相关二进制可执行文件
如果有生成二进制可执行文件,说明busybox成功安装了cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin ls
1.4 复制动态链接库
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
cp /opt/hisi-linux/x86-arm/arm-himix200-linux/runtime_glibc/a7_softfp_neon-vfpv4/lib.tgz ./
tar -xzvf lib.tgz
cd lib/
ls -ahl
cd ..
ls
rm -rf ./lib.tgz
注意在解压的过程中,直接就覆盖了目标路径下的文件
如果出现动态链接库,那么就说明复制成功了
并且可以发现,有一些是符号链接
1.5 用Strip精简体积,节省空间用
但是因为我们使用的是EMMC,不用在乎这点空间,所以就没有做这一步了
1.6 最后,生成文件系统
首先得编译生成make_ext4fs并且复制到目标路径
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/pc/ext4_utils make cd bin cp ./make_ext4fs /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub
然后回到制作目录
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub
最后就开始制作
./make_ext4fs -l 200M -s build_rootfs_hi3516dv300.ext4 rootfs_glibc
检查一下大小
file ./build_rootfs_hi3516dv300.ext4 du -h ./build_rootfs_hi3516dv300.ext4
也就才59M,说明-l这个参数,只是划定最大的大小而已,本来是多大,就是多大,并不会填充空内容
到这一步,就制作完成了
二、烧写根文件系统
2.1 烧写成功截图
2.2 相关说明
2.2.1 相关文件夹说明
进入到根目录底下来了
在bin目录下有相关的应用程序
在lib目录下有相应的动态库
在etc目录下可以看到相关的配置脚本,/etc/init.d/rcS,也都是共用的,/bin/mount -a,挂载的就是init table
的dev目录下可以看到相关的设备文件,说明mdev也工作了
ifconfig eth0 192.168.31.14,这样一来,网口也工作了,说明之前kernel里面的网卡设置,也是工作的
这仅仅是一个最小的根文件系统
2.2.2 少了的相关驱动
/dev/input:只有一个mice
少了相关的测试程序
少了mpp相关的编解码应用程序
后面相关的内容操作也就在:cp2rootfs.sh中
2.2.3 在rcS里面做了什么
S00devs里面的,这个在手动创建根文件系统的时候,也干过,尤其是console,null这个干过,其实就是创建字符设备的主设备号与次设备号
S01udev里面的,主要是创建了udev,创建了虚拟文件系统,然后去挂载
S80network里面,是和网络有关的,/proc/cmdline,即为传参文件,即通过bootargs传参的时候,有没有传ipinfo,如果有就读进来,通过ifconfig去设定它,并打印出来,否则就算了。
三、全程编译的流程
3.1首先要下载的软件
要下载一下软件
要配置以下工具
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/board/eudev-3.2.7
阅读该路径下的readme_cn.txt文件:
具体描述如下图,按照描述操作:
注意:
eudev-3.2.7工具编译时依赖gperf工具,服务器上需要安装gperf工具。
下载网址:http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz
安装说明:
tar -xzf gperf-3.1.tar.gz
cd gperf-3.1
sudo ./configure
sudo make
sudo make install
3.2然后执行编译命令
注意从这里开始,直接看第四部分就行了
并且,第三部分只需要做一次就行
仅编译的话,就只执行第一条命令,后面两条分别是清理,彻底清理
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 BOOT_MEDIA=emmc all
make CROSS_COMPILE=arm-himix200-linux- clean
make CROSS_COMPILE=arm-himix200-linux- distclean
3.3全程的编译流程
- 详情见41.1-全程编译笔记
四、参考全程编译,单独制作Rootfs
4.1 单独制作过程记录,并且已经成功
先清除记录
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv make CROSS_COMPILE=arm-himix200-linux- clean
编译生成板载工具
make hiboardtools -j8
解压rootfs.tgz
rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc* -rf tar xzf /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/rootfs_scripts/rootfs.tgz -C /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub mv /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
生成lib文件
tar xzf /opt/hisi-linux/x86-arm/arm-himix200-linux/runtime_glibc/a7_softfp_neon-vfpv4/lib.tgz -C /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
用strip工具缩小体积
海思官方使用了这一个步骤,但是朱有鹏的教程中,是没有使用这一条命令的,没有使用这一条命令,测试通过
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
arm-himix200-linux-strip -d ./lib/*
解压busybox,以下几步是为了bin目录
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2 -rf tar xzf /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2.tgz -C /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox find /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2 | xargs touch
配置busybox的.config文件
cp /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/config_v200_a7_softfp_neon /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/.config
编译busybox
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/ make
!!!更确切的编译方法是,用的这种方法,测试通过
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 MP_TYPE=smp BOOT_MEDIA=emmc OSDRV_CROSS_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -w" LIB_TYPE=glibc RUNTIME_LIB=runtime_glibc CROSS_SPECIFIED=y -j8
- 部署busybox
make install cp -af /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/_install/* /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
!!!更确切的部署方法是,用的这种方法,测试通过
make CROSS_COMPILE=arm-himix200-linux- CHIP=hi3516dv300 MP_TYPE=smp BOOT_MEDIA=emmc OSDRV_CROSS_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -w" LIB_TYPE=glibc RUNTIME_LIB=runtime_glibc CROSS_SPECIFIED=y install
cp -af /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/opensource/busybox/busybox-1.26.2/_install/* /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
复制板载工具到rootfs
cp -af /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/board/e2fsprogs/bin/* /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin cp -af /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/board/reg-tools-1.0.0/bin/* /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin cp -af /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/board/eudev-3.2.7/rootfs/. /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/
删除非必要的工具,海思官方是删掉了这些工具包的
!!!其实,这一个步骤是可以不执行的,保留最好了,制作的时候,选择不删除,测试通过
rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/dev/* -rf
rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin/himm -rf
rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin/himc -rf
rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin/himd -rf
rm /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc/bin/himd.l -rf
对文件设置权限
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc ln -s sbin/init init chmod 750 * -R chmod 750 usr/* -R chmod -w usr/bin -R chmod -w usr/sbin -R chmod -w sbin -R
编译生成make_ext4fs工具
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/tools/pc/ext4_utils make cd ./bin/
制作生成rootfs镜像
./make_ext4fs -l 96M -s /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_hi3516dv300_96M.ext4 /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub/rootfs_glibc
96M只是一个最大的大小,如果小于这个大小,并不会去填充到96M
生成的rootfs文件位于:/home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub
cd /home/book/Hi3516DV300_Original/Hi3516CV500_SDK_V2.0.2.0/osdrv/pub