制作Hi3519v101根文件系统
1、使用busybox-1.20.2制作Hi3519v101根文件系统busybox 完整源代码就存放在 osdrv/opensource/busybox中,先解压tar -zxf busybox-1.20.2.tgz2、进去busybox,指定配置文件cd busybox-1.20.2/cp config_v500_softfp_neon .config注:此处使用co...
1、使用busybox-1.20.2制作Hi3519v101根文件系统
busybox 完整源代码就存放在 osdrv/opensource/busybox中,先解压
tar -zxf busybox-1.20.2.tgz
2、进去busybox,指定配置文件
cd busybox-1.20.2/
cp config_v500_softfp_neon .config
注:此处使用config_v500_softfp_neon对应工具链 arm-hisiv500-linux
3、配置 busybox
make menuconfig
此处采用动态库,默认配置。
注:busybox 的配置界面和内核配置相似,其功能选项容易理解,可以根据自己的需求选择配置。
在 Busybox Settings ---> Build Options中注意下面两个选项:
[*]Build BusyBox as a static binary (no shared libs)
[*] Build with Large File Support (for accessing files > 2 GB)
(arm-hisiv500-linux-) Cross Compiler prefix
() Path to sysroot
(-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4) Additional CFLAGS (-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4)
()Additional LDFLAGS
() Additional LDLIBS
其中:
− 第一个选项选择是否把 busybox 编译成静态链接的可执行文件。如果选择该选项,编译出来的 busybox 就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项将得到动态链接的 busybox,体积较小,但需要动态库的支持。
− 第二个选项是用于选择 SDK 推荐的交叉编译器,配置好后保存并退出。
4、编译和安装 busybox
make
make install
编译并安装成功后,在 busybox 目录下的_install目录下生成以下目录及文件:
ls _install/ -l
total 12
drwxr-xr-x 2 osrc osrc 4096 Oct 24 22:08 bin
lrwxrwxrwx 1 osrc osrc 11 Oct 24 22:08 linuxrc -> bin/busybox
drwxr-xr-x 2 osrc osrc 4096 Oct 24 22:08 sbin
drwxr-xr-x 5 osrc osrc 4096 Oct 21 22:34 usr
5、生成dev/目录文件
mkdir rootbox
cp -r _install/* rootbox/ //将_install复制到rootbox文件夹
cd rootbox/
mkdir dev
cd dev/
sudo mknod console c 5 1 //字符设备,主设备是5,次设备是1
sudo mknod null c 1 3 //字符设备,主设备是1,次设备是3
//文件属性可通过查看虚拟机可得
ls -l
total 0
crw-r--r-- 1 root root 5, 1 Oct 21 22:43 console
crw-r--r-- 1 root root 1, 3 Oct 21 22:44 null
6、添加etc/inittab
mkdir etc
sudo vim etc/inittab
console::askfirst:-/bin/sh
//添加/保存推出,askfirst是init运用需要调用的标准输入/输出/错误程序
7、添加C库
可以从Hi3519V101_SDK_V1.0.4.0/osdrv/opensource/toolchain/arm-hisiv500-linux/runtime_lib/default/lib文件夹拷贝
也可以从Hi3519V101_SDK_V1.0.4.0/package/image_big-little/rootfs_uclibc_big-little/lib/ 文件夹拷贝
.a文件为静态库
.so文件为动态库
mkdir lib //创建lib文件夹
cp /home/osrc/Hi3519V101_SDK_V1.0.4.0/package/image_big-little/rootfs_uclibc_big-little/lib/* lib/ -d //加上-d选项,拷贝链接
ls lib/ -l
total 7676
-rwxr-xr-x 1 osrc osrc 26316 Oct 24 22:27 ld-uClibc-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 21 Oct 24 22:27 ld-uClibc.so.0 -> ld-uClibc-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 10440 Oct 24 22:27 libcrypt-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 20 Oct 24 22:27 libcrypt.so.0 -> libcrypt-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 21 Oct 24 22:27 libc.so.0 -> libuClibc-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 10596 Oct 24 22:27 libdl-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 17 Oct 24 22:27 libdl.so.0 -> libdl-0.9.33.2.so
-rw-r--r-- 1 osrc osrc 132 Oct 24 22:27 libgcc_s.so
-rw-r--r-- 1 osrc osrc 1392188 Oct 24 22:27 libgcc_s.so.1
-rwxr-xr-x 1 osrc osrc 45440 Oct 24 22:27 libm-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 16 Oct 24 22:27 libm.so.0 -> libm-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 1840 Oct 24 22:27 libnsl-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 18 Oct 24 22:27 libnsl.so.0 -> libnsl-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 111704 Oct 24 22:27 libpthread-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 22 Oct 24 22:27 libpthread.so.0 -> libpthread-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 1844 Oct 24 22:27 libresolv-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 21 Oct 24 22:27 libresolv.so.0 -> libresolv-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 11704 Oct 24 22:27 librt-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 17 Oct 24 22:27 librt.so.0 -> librt-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 19 Oct 24 22:27 libstdc++.so -> libstdc++.so.6.0.20
lrwxrwxrwx 1 osrc osrc 19 Oct 24 22:27 libstdc++.so.6 -> libstdc++.so.6.0.20
-rwxr-xr-x 1 osrc osrc 5559412 Oct 24 22:27 libstdc++.so.6.0.20
-rwxr-xr-x 1 osrc osrc 21100 Oct 24 22:27 libthread_db-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 24 Oct 24 22:27 libthread_db.so.1 -> libthread_db-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 628284 Oct 24 22:27 libuClibc-0.9.33.2.so
-rwxr-xr-x 1 osrc osrc 4528 Oct 24 22:27 libutil-0.9.33.2.so
lrwxrwxrwx 1 osrc osrc 19 Oct 24 22:27 libutil.so.0 -> libutil-0.9.33.2.so
至此最简单的文件系统就做好了~
要想不费时、更简单的得到文件系统,也可以直接用sdk现有的,路径为
Hi3519V101_SDK_V1.0.4.0/package/image_big-little/rootfs_uclibc_big-little/
8、生成镜像文件
osrc@osrc:$ cd /home/osrc/Hi3519V101_SDK_V1.0.4.0/osdrv/tools/pc/ext4_utils/ext4_utils
//跳转到ext4文件系统工具
osrc@osrc:/home/osrc/Hi3519V101_SDK_V1.0.4.0/osdrv/tools/pc/ext4_utils/ext4_utils$ sudo ./make_ext4fs -s -l 32M rootfs_hi3519v101_32M.ext4 /home/osrc/Hi3519V101_SDK_V1.0.4.0/osdrv/opensource/busybox/busybox-1.20.2/rootbox/
//利用工具制作镜像文件
其中,-l 32M 是指定 uboot 中配置 emmc 的文件系统分区大小为 32M,-s 为使用 gzip压缩,rootfs.ext4 是生成的 Ext4 文件系统映像文件,/home/osrc/Hi3519V101_SDK_V1.0.4.0/osdrv/rootfs_scripts/rootfs是之前已经制作好的根文件系统路径。请根据实际情况修改参数。
9、最后是烧录
10、丰富根文件系统,增加ps运用程序查看命令
创建初始化脚本
sudo vim etc/inittab
//在原来的基础上加上
::sysinit:/etc/init.d/rcS
添加脚本内容,可以在里面添加自动执行命令
mkdir /etc/init.d
sudo vim etc/init.d/rcS
//添加下面内容,作用为挂接/etc/fstab文件制定的所有文件系统,最后改变属性,使它能执行
mount -a
sudo chmod +x etc/init.d/rcS
创建etc/fstab
sudo vim etc/fstab
//添加如下内容,增加proc虚拟文件系统,用于收集当前运用程序
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
/etc/fstab文件被用来定义文件系统的“静态信息”,这些信息被用来控制mount命令的行为。各字段意义如下:
①device:要挂载的设备
②mount-point:挂载点
③type:文件系统类型
④options:挂接参数,以逗号隔开
⑤dump/fsck order:用来控制dump、fsck程序的行为
最后在根目录创建proc文件夹
mkdir proc
ls
bin dev etc lib linuxrc proc sbin usr
下载到单板通过ps命令即可
# ps
PID USER TIME COMMAND
1 0 0:00 init
2 0 0:00 [kthreadd]
3 0 0:00 [ksoftirqd/0]
4 0 0:00 [kworker/0:0]
5 0 0:00 [kworker/0:0H]
6 0 0:00 [kworker/u4:0]
7 0 0:00 [rcu_sched]
8 0 0:00 [rcu_bh]
9 0 0:00 [migration/0]
10 0 0:00 [migration/1]
11 0 0:00 [ksoftirqd/1]
12 0 0:00 [kworker/1:0]
13 0 0:00 [kworker/1:0H]
14 0 0:00 [khelper]
15 0 0:00 [kdevtmpfs]
16 0 0:00 [netns]
17 0 0:00 [writeback]
18 0 0:00 [bioset]
19 0 0:00 [kblockd]
20 0 0:00 [spi0]
21 0 0:00 [kworker/u4:1]
24 0 0:00 [spi1]
29 0 0:00 [spi2]
32 0 0:00 [spi3]
35 0 0:00 [rpciod]
36 0 0:00 [kworker/1:1]
37 0 0:00 [kswapd0]
38 0 0:00 [fsnotify_mark]
39 0 0:00 [nfsiod]
47 0 0:00 [kpsmoused]
48 0 0:00 [cfinteractive]
49 0 0:00 [ipv6_addrconf]
50 0 0:00 [deferwq]
51 0 0:00 [kworker/u4:2]
52 0 0:00 [mmcqd/0]
53 0 0:00 [mmcqd/0boot0]
54 0 0:00 [mmcqd/0boot1]
55 0 0:00 [jbd2/mmcblk0p3-]
56 0 0:00 [ext4-rsv-conver]
60 0 0:00 -/bin/sh
61 0 0:00 [kworker/0:1]
62 0 0:00 ps
11、使用mdev创建设备文件
mdev是udev的简化版本,它通过读取内核信息来创建设备文件。
mdev的用法参考busybox/doc/mdev.txt。
mdev主要用用途为,初始化/dev目录、动态更新。支持热插拔,即接入、卸下设备时执行某些动作。
要使用mdev,需要内核支持sysfs文件系统,为减少对Flash的读写,还要支持tmpfs文件系统。要先确保内核已经设置了CONFIG_SYSFS、CONFIG_TMPFS配置项。
要在内核启动时,自动运行mdev,需要修改etc/fstab来自动挂载文件系统、修改etc/init.d/rcS加入自动运行的命令,如下:
sudo vim etc/fstab
//添加如下内容
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
#tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
sudo vim etc/init.d/rcS
//添加如下内容
#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
添加sys文件夹
mkdir sys
至此根文件系统就做好了,接下来可以通过nfs,将开发板挂载到服务器上减小反复烧写文件系统的操作。
但我单板遇到如下问题还未解决,后续再说吧~
问题:can't create /proc/sys/kernel/hotplug: nonexistent directory
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)