制作Hi3519v101根文件系统
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、最后是烧录
参考Hi3519v101烧写映像文件到emmc
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 COMMAND1 0 0:00 init2 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/sh61 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,将开发板挂载到服务器上减小反复烧写文件系统的操作。
可参考这里Hi3519v101通过NFS挂载到服务器
但我单板遇到如下问题还未解决,后续再说吧~
问题:can't create /proc/sys/kernel/hotplug: nonexistent directory
制作Hi3519v101根文件系统相关推荐
- 使用BusyBox制作linux根文件系统(CramFS+mdev)
摘自:http://m.blog.chinaunix.net/uid-23089249-id-34501.html 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 开发板: ...
- 使用BusyBox制作linux根文件系统
操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 开发板:博创arm2410s 交叉编译工具:arm-linux-gcc-4.1.1 BusyBox:busybox-1.11.1 ...
- 制作buildroot根文件系统(三):使用mplayer播放视频
文章目录 参考 前言 一.制作根文件系统 1.关于 mplayer 2.配置buildroot 3.编译buildroot 4.生成的根文件系统和工具链位置 二.测试根文件系统 1.解压根文件系统到N ...
- 制作jffs2根文件系统
一.制作mkfs.jffs2工具 首先得准备好两个软件包 ,一个是MTD设备的工具包,另一个是zlib压缩包,在这我的MTD设备工具包为mtd-snapshot-20050519.tart.tar,z ...
- 制作ubuntu根文件系统
参考文档: http://blog.csdn.net/mountzf/article/details/51707853 http://developer.t-firefly.com/thread-10 ...
- 制作嵌入式根文件系统(常见问题详解)
首先介绍点背景知识,关于inittab的: init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名.检查和安装磁盘及文件系统.启动系统日志.配置网络 ...
- 用BusyBox制作Linux根文件系统
STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录 /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin ...
- 制作嵌入式根文件系统
首先介绍点背景知识,关于inittab的: init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名.检查和安装磁盘及文件系统.启动系统日志.配置网络 ...
- 制作根文件系统出现错误:No init found
问题: 1.构建最小根文件系统时,出现错误: Warning: unable to open an initial console. Failed to execute /linuxrc. Attem ...
最新文章
- 华月互网获得2012全国十大IDC服务商
- linux who命令测试,Linux中的who命令详细示例
- Purpose of cmove instruction in x86 assembly? | cmove 指令如何避免错误的分支预测带来的开销?
- java中对date的一些处理以及获取date
- 程序员的“数学修炼手册”,帮你快速恶补数学知识 | 资源
- DHCP协议++ClientServer架构
- 【kmp】POJ-3461 Oulipo
- windows 2008服务器还原系统,windows 2008服务器系统
- python按键按下改变数值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...
- 什么是ajax?ajax作用是什么?
- php smarty程序设计,Smarty程序设计-动态文件操作
- B区考研学校排名计算机,b区(b区考研学校排名)
- Cesium 地形图
- 颜色迁移之一——基础知识(色彩空间及其转换)
- 为什么CAD输入文字时文字特别大但输入后就消失了?
- 初学编程遇到的问题总结
- 天猫tf卡速度测试软件,迟到的晒单:天猫5块9包邮的32GBTF卡拆箱评测
- 粘贴应变片步骤及注意事项
- Bootstrap学习js插件篇之提示框
- 手动安装Eclipse插件
热门文章
- Uber乱世布局,反Amazon联盟,视频行业转折点
- 利用树莓派制作天气闹钟
- webservice 天气预报的接口
- Android 基础知识4-2.11 AbsoluteLayout(绝对布局)详解
- 简析脱 PEBundle 2.0x - 2.4x- Jeremy Collake
- 免费报表XDOC从入门到精通(一)简介
- 运营商设备常见维护命令,阿尔卡特朗讯7750
- sklearn学习谱聚类
- android自动烧写工具,利用fastboot烧写Android平板镜像典型步骤举例
- 一幅长文细学华为MRS大数据开发(五)——MapReduce和Yarn