登录
注册
一键加入QQ群
友善之臂官方网站
首 页
联系我们
淘宝店铺
维基教程
资料下载
搜索帖子!
NanoPC-T2
Core4418
NanoPC-T3 Plus
Core6818
NanoPi-M4B
NanoPC-T4
NanoPC-T6
NanoPi-NEO
NanoPi-NEO Core
NanoPi-NEO Air
NanoPi-M1 Plus
NanoPi-Duo2
NanoPi-NEO3
核心板:
Smart210
Tiny210
Smart4418
Smart6818
SOM-RK3399V2
CM3588(新品)
路由器:
R1
R1S
R2S
R2S Plus
R2C Plus
R4S
R5S
R5C
R6C
R6S
热门版块:
开发板实战手册及教程
开发板销售中心
开发板硬件讨论区
硬软DIY及开发
嵌入式交流与讨论
友友粉丝快线
默认风格
用户中心首页
编辑个人资料
查看个人资料
好友列表
用户权限查看
积分管理
积分转换
特殊组购买
收藏夹
我的主题
基本统计信息
到访IP统计
管理团队
管理统计
在线统计
会员排行
版块排行
帖子排行
个人首页
我的收藏
好友近况
友善之家
Linux技术交流区
Tiny210v2( S5PV210 )平台下创建基本根文件系统
友友粉丝快线
开发板销售中心
嵌入式最新资讯
友善之臂最新动态
友善之臂官方客服中心
开发板实战手册及教程
应用方案和定制开发
NanoPi 交流与讨论
NanoPi 玩家交流区
ROM发布区
硬软DIY及开发
嵌入式交流与讨论
Android技术交流区
Linux技术交流区
U-boot技术交流区
WinCE技术交流区
Ubuntu技术交流区
裸机程序和微型OS
OpenWRT讨论区
开发板硬件讨论区
相关资料下载及使用技巧
站点服务
二手交易区
我的论坛我的贴
站务管理与公告
上一主题
下一主题
新 帖
主题 : Tiny210v2( S5PV210 )平台下创建基本根文件系统
复制链接
|
浏览器收藏
|
打印
happyzlz
级别: 骑士
作者资料
发送短消息
加为好友
UID:
5844
精华:
9
发帖:
64
金钱:
770 两
威望:
154 点
贡献值:
9 点
综合积分:
308 分
注册时间:
2009-05-11
最后登录:
2019-05-14
楼主
发表于: 2013-01-25 19:47
全看
|
小
中
大
Tiny210v2( S5PV210 )平台下创建基本根文件系统
管理提醒:
本帖被 xoom 执行加亮操作(2013-01-26)
0. 概要介绍
1. 创建C library
2. 创建基本工具集(busybox)
3. 创建必要的系统配置文件
4. 做成根文件系统Image
0. 概要介绍
=========================================================
根文件系统的建立,可以有多种方式。
* 直接利用开发板供应商提供的根文件系统;
* 利用开源社区的发行版,比如debian/ubuntu for arm;
* 利用meego/tizen/moblin/android提供的根文件系统;
* 自己建立。
其中最方便的还是利用别人已经完成的成果,避免重新发明轮子。
但如果别人已有的成果不能满足自己需求,或者想要体验一下根文件系统如何建立的话,还是需要自己来实践一下。
在这里记录一下我建立最小根文件系统的过程,以防忘记。
这个方法不一定是正统方法,只是一个可行的实践,如果大家有其他方式,欢迎讨论。
最小根文件系统是为了开发板上电以后能够登录shell,并且有最基本的命令工具集。
想要建立一个和PC类似环境的最小根文件系统的话,可以参考 linux from scratch 的实践过程:
www.linuxfromscratch.org
中的 LFS 以及 CLFS 部分。
Linux内核启动完成以后,需要执行 init 这个命令,这是User Space 里面的第一个进程。
init 可以由 sysvinit 提供,也可以由 upstart 提供,当然也可以由 busybox 提供。
在我环境里面,为了让根文件系统更小,采用了 busybox 作为解决方案。
busybox 包含了基本系统中所需要的大部分命令支持,只不过这些命令是重新实现的,尽量兼容于原有软件,对于命令参数也可能不完全支持。
如果将 busybox 编译成 static 的话。最小根文件系统只使用 busybox 就可以了。这个根据开发需要决定。
在我的环境里面,busybox 是链接到 C library 上的。
因此,最小根文件系统只依赖于两个部分: C library 和 busybox。
1. 创建C library
=========================================================
C library 如果不想重新编译的话,最好是使用 toolchain 已经做成的,
因为如果你用这个toolchain进行交叉编译的话,所有编译完的软件都是依赖于 toolchain中的 C library的。
为了保持一致性,建议直接使用toolchain中的 C library。
toolchain就是交叉编译工具集, 可以使用开发板提供商提供的。可以自己制作一个。
为了针对 S5PV210 这个 coretex-a8 进行优化,我利用 crosstool-ng 制作了一个针对 armv7a 硬件浮点neon 运算优化的toolchain。
并且利用了 linaro 项目中的 gcc 和 gdb 。利用这个toolchain 编译出来的二进制文件,全部都是针对 armv7a neon 的。
制作 toolchain 的方法,可以参考之前写的帖子:
http://www.aiothome.net/read.php?tid-27480.html
但距离写那个帖子已经有一段时间了,配置稍微有一些变化。你可以参考附件中的 crosstool-ng 的配置文件自己试一试。
另外,如果想要 sysroot 目录中,没有 libexec 这个目录,可以修改 glibc-eglibc.sh-common 这个文件,添加 --libexecdir=/usr/lib 参数。
在我的系统中,这个文件位于: /usr/lib/ct-ng.hg+unknown-20130103.094521/scripts/build/libc :
351 CT_DoExecLog CFG \
352 BUILD_CC="${CT_BUILD}-gcc" \
353 CFLAGS="${glibc_cflags}" \
354 CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \
355 AR=${CT_TARGET}-ar \
356 RANLIB=${CT_TARGET}-ranlib \
357 "${CONFIG_SHELL}" \
358 "${src_dir}/configure" \
359 --prefix=/usr \
360 --libexecdir=/usr/lib \
361 --build=${CT_BUILD} \
362 --host=${CT_TARGET} \
363 --cache-file="$(pwd)/config.cache" \
364 --without-cvs \
365 --disable-profile \
366 --without-gd \
367 --with-headers="${CT_HEADERS_DIR}" \
368 "${extra_config[@]}" \
369 "${CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY[@]}"
在我的配置文件中,交叉编译环境会安装到 /opt/linaro-gcc473-eglibc216-armv7a-neon 目录中,
而 /opt/linaro-gcc473-eglibc216-armv7a-neon/arm-unknown-linux-gnueabi/sysroot 这个目录中的内容,
就是编译上层软件所需要的运行库和开发库的集合,什么 .so 啊, .h 文件啊,全部都在这里。
在我的开发环境PC中, 目标环境的根目录位于 /opt/S5PV210/rootfs ,将 sysroot 的文件全部拷贝过来:
sudo cp -R /opt/linaro-gcc473-eglibc216-armv7a-neon/arm-unknown-linux-gnueabi/sysroot /opt/S5PV210/rootsf
至此,C library 已经完成了。
2. 创建基本工具集(busybox)
=========================================================
需要注意的是: 这个 C library 包含了开发环境,那些 头文件/ .o 文件等,有一些是运行时不需要的。
我还不清楚哪些不需要,删除不许要的文件,能够节约一些磁盘空间。
下一步就是利用 busybox 生成常用工具。
busybox 的源代码,是直接利用光盘中的 busybox-1.17.2-20101120.tgz 。这个使用网上更加新的源代码应该也没有问题。
我在配置 busybox 的时候,配置其不使用 /usr 目录,是因为安装其他软件包的时候,全部安装到 /usr 目录下,
这样可以将基本文件系统和软件开发栈隔离开。这个需要依据你自己的设计决定。
busybox 解压完成后,可以通过 make menuconfig 进行配置。
配置完成后,保存会生成 .config 配置文件。然后 make 编译busybox。
在配置文件中,可以设定安装到的目录,这个目录就是 make install 的安装目录。
配置项为: CONFIG_PREFIX="/opt/S5PV210/rootfs"
我将其设置为 /opt/S5PV210/rootfs 是为了避免再次拷贝。
你也可以参考我的配置文件: busybox_config ,将其拷贝为 .config 然后直接make编译得到二进制文件。
3. 创建必要的系统配置文件
=========================================================
现在还剩下对根文件系统进行一些配置。
建立必要的目录:
install -d /opt/S5PV210/rootfs/dev
install -d /opt/S5PV210/rootfs/etc
install -d /opt/S5PV210/rootfs/home
install -d /opt/S5PV210/rootfs/proc
install -d /opt/S5PV210/rootfs/root
install -d /opt/S5PV210/rootfs/run
install -d /opt/S5PV210/rootfs/sys
install -d /opt/S5PV210/rootfs/var
install -d /opt/S5PV210/rootfs/tmp
install -d /opt/S5PV210/rootfs/etc/init.d
install -d /opt/S5PV210/rootfs/etc/rc.d
install -d /opt/S5PV210/rootfs/var/lib
install -d /opt/S5PV210/rootfs/var/spool
install -d /opt/S5PV210/rootfs/var/lock
install -d /opt/S5PV210/rootfs/var/log
install -d /opt/S5PV210/rootfs/run/lock
ln -s ../run /opt/S5PV210/rootfs/var/run
ln -s ../run/lock /opt/S5PV210/rootfs/var/lock
在 /opt/S5PV210/rootfs 中的 etc 目录下创建必要的系统配置文件:
这几个文件可以参考开发板提供上提供的根文件系统的配置文件,也可以参考开发PC上的配置文件。
其中最重要的文件是 rcS ,这个是 init 程序读取的配置文件。
懒得自己写了,直接从 友善提供的根文件系统拷贝过来。
group
host.conf
localtime
mdev.conf
passwd
profile
init.d/rcS
rc.d/init.d/netd
在 /opt/S5PV210/rootfs 中的 dev 目录下创建必要的设备文件:
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo mknod loop0 b 7 0
4. 做成根文件系统Image
=========================================================
现在,基本的根文件系统已经做成,理论上已经可以启动了。
你可以参考下面的帖子,让开发板从远程挂载 根文件系统。
http://www.aiothome.net/read.php?tid-27737.html
或者做成 ROMFS/CRAMFS/YAFFS 格式的镜像文件下载到 flash 中。
做成yaffs镜像文件的工具在光盘的 mktools-20120518.tar.gz 文件中。
对于 yaffs 镜像文件的做成,可以使用如下命令:
cd /opt/S5PV210/rootfs
mkyaffs2image-mlc2 ../rootfs.img
[ 此帖被happyzlz在2013-01-25 20:02重新编辑 ]
附件:
busybox_config.gz
(6 K) 下载次数:80
附件:
ct-ng-new.config.gz
(4 K) 下载次数:80
顶端
回复
引用
分享
ziwuchen
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
56813
精华:
0
发帖:
18
金钱:
90 两
威望:
18 点
贡献值:
0 点
综合积分:
36 分
注册时间:
2011-10-13
最后登录:
2015-03-22
1楼
发表于: 2013-07-15 09:23
全看
|
小
中
大
图片:
关于C library的用法和用处还不是很理解,需要再行学习。
另外问楼主一个问题,就是我通过NFS挂载根文件系统显
示挂载成功了,但是无法在命令行下输入命令,请问是什
么原因,谢谢。
顶端
回复
引用
分享
上一主题
下一主题
友善之家
Linux技术交流区
http://121.40.142.80
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问