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根文件系统相关推荐

  1. 使用BusyBox制作linux根文件系统(CramFS+mdev)

    摘自:http://m.blog.chinaunix.net/uid-23089249-id-34501.html 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7   开发板: ...

  2. 使用BusyBox制作linux根文件系统

    操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 开发板:博创arm2410s 交叉编译工具:arm-linux-gcc-4.1.1 BusyBox:busybox-1.11.1 ...

  3. 制作buildroot根文件系统(三):使用mplayer播放视频

    文章目录 参考 前言 一.制作根文件系统 1.关于 mplayer 2.配置buildroot 3.编译buildroot 4.生成的根文件系统和工具链位置 二.测试根文件系统 1.解压根文件系统到N ...

  4. 制作jffs2根文件系统

    一.制作mkfs.jffs2工具 首先得准备好两个软件包 ,一个是MTD设备的工具包,另一个是zlib压缩包,在这我的MTD设备工具包为mtd-snapshot-20050519.tart.tar,z ...

  5. 制作ubuntu根文件系统

    参考文档: http://blog.csdn.net/mountzf/article/details/51707853 http://developer.t-firefly.com/thread-10 ...

  6. 制作嵌入式根文件系统(常见问题详解)

    首先介绍点背景知识,关于inittab的: init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名.检查和安装磁盘及文件系统.启动系统日志.配置网络 ...

  7. 用BusyBox制作Linux根文件系统

    STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录 /dev  /etc /lib  /usr  /var /proc /tmp /home /root /mnt /bin  /sbin ...

  8. 制作嵌入式根文件系统

    首先介绍点背景知识,关于inittab的: init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名.检查和安装磁盘及文件系统.启动系统日志.配置网络 ...

  9. 制作根文件系统出现错误:No init found

    问题: 1.构建最小根文件系统时,出现错误: Warning: unable to open an initial console. Failed to execute /linuxrc. Attem ...

最新文章

  1. 华月互网获得2012全国十大IDC服务商
  2. linux who命令测试,Linux中的who命令详细示例
  3. Purpose of cmove instruction in x86 assembly? | cmove 指令如何避免错误的分支预测带来的开销?
  4. java中对date的一些处理以及获取date
  5. 程序员的“数学修炼手册”,帮你快速恶补数学知识 | 资源
  6. DHCP协议++ClientServer架构
  7. 【kmp】POJ-3461 Oulipo
  8. windows 2008服务器还原系统,windows 2008服务器系统
  9. python按键按下改变数值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...
  10. 什么是ajax?ajax作用是什么?
  11. php smarty程序设计,Smarty程序设计-动态文件操作
  12. B区考研学校排名计算机,b区(b区考研学校排名)
  13. Cesium 地形图
  14. 颜色迁移之一——基础知识(色彩空间及其转换)
  15. 为什么CAD输入文字时文字特别大但输入后就消失了?
  16. 初学编程遇到的问题总结
  17. 天猫tf卡速度测试软件,迟到的晒单:天猫5块9包邮的32GBTF卡拆箱评测
  18. 粘贴应变片步骤及注意事项
  19. Bootstrap学习js插件篇之提示框
  20. 手动安装Eclipse插件

热门文章

  1. Uber乱世布局,反Amazon联盟,视频行业转折点
  2. 利用树莓派制作天气闹钟
  3. webservice 天气预报的接口
  4. Android 基础知识4-2.11 AbsoluteLayout(绝对布局)详解
  5. 简析脱 PEBundle 2.0x - 2.4x- Jeremy Collake
  6. 免费报表XDOC从入门到精通(一)简介
  7. 运营商设备常见维护命令,阿尔卡特朗讯7750
  8. sklearn学习谱聚类
  9. android自动烧写工具,利用fastboot烧写Android平板镜像典型步骤举例
  10. 一幅长文细学华为MRS大数据开发(五)——MapReduce和Yarn