转自Tiny210v2(
S5PV210 )平台下创建基本根文件系统

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.arm9home.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.arm9home.net/read.php?tid-27737.html



或者做成 ROMFS/CRAMFS/YAFFS 格式的镜像文件下载到 flash 中。

做成yaffs镜像文件的工具在光盘的 mktools-20120518.tar.gz 文件中。

对于 yaffs 镜像文件的做成,可以使用如下命令:

cd /opt/S5PV210/rootfs

mkyaffs2image-mlc2 ../rootfs.img

Tiny210v2( S5PV210 )平台下创建基本根文件系统的更多相关文章

  1. 论文学习 - 《Hadoop平台下的海量数据存储技术研究》

    摘要 研究背景: 1. 互联网的图片数据急剧膨胀 2. Hadoop平台下的Hdfs分布式文件系统能够很好的处理海量数据 研究内容: 1. Hadoop平台工作原理 2. Hadoop平台下图片存储系 ...

  2. X86平台下嵌入式linux触摸屏解决方案(usb触摸屏控制器+完美校准方案+触摸屏QTE开发环境搭建)

    一直在用X86平台,真心不想用WINCE和XPE,一些大的硬件供应商都不提供linux平台下的技术支持,比如研华的3343PC104系列的板子... 开发的问题如下: 1 USB控制器目前只有台湾和竹 ...

  3. [转]Windows平台下安装Hadoop

    1.安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件 ...

  4. net平台下连接池

    http://www.cnblogs.com/visionwang/archive/2012/11/16/2774203.html net平台下连接池概述 ADO.NET已经为我们提供这样的连接池管理 ...

  5. Thinkphp5笔记三:创建基类

    做项目之前,一定要先部署要自己的"基类",非常的重要.打个比方,要访问会员中心相关的控制器,这类控制器是不是都要有一个“登录限制”,才让访问会员相关的控制器? 一.创建三大基类 原 ...

  6. STM32平台SD卡的FatFS文件系统开发

    STM32平台SD卡的FatFS文件系统开发 系统平台: STM32系列的STM32F103ZE SPI方式与SD卡通信 SD上移植FatFS系统 1 FatFS文件系统 1.1 FatFS简介 Fa ...

  7. Mac OS平台下应用程序安装包制作工具Packages的使用介绍

    一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...

  8. Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  9. windows平台下基于VisualStudio的Clang安装和配置

    LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...

随机推荐

  1. 记录一次centos升级gblic的教训

    前些天公司项目需要对上传的图片打水印,前端采用angularjs,后端nodejs,网上一搜,找到了一个images的库,在本地Windows环境下试了下还不错,然后就上传测试服务器(centos6. ...

  2. Apache 80 端口被占用无法重启解决办法

    原文出处 Apache 80 端口被占用无法重启解决办法 www.111cn.net 编辑:tiger 来源:转载使用WEB服务器的朋友都知道80端口是一个用来对外让用户访问的一个端口了,像apach ...

  3. sqlserver临时表排序问题

    在2005和2008中,如果将有序的记录插入临时表,则从临时表查看出来的记录是有序的(不使用Order by也是有序状态) 但从2012开始,即使插入的记录集是有序的,查看出来的结果变得无序了,需要依 ...

  4. 02_使用WebMagic爬虫获取CSDN推荐专家的个人博客信息

    本来是想抓取博客园的博客推荐的页面的,但由于一些博客进去的页面格式都不太相同,一时不想花时间去寻找规律,发现CSDN上面的格式较为单一,就决定以CSDN推荐专家的个人博客信息作为爬虫抓取的目标. [首 ...

  5. Android中View绘制流程以及invalidate()等相关方法分析(转载的文章,出处在正文已表明)

    转载请注明出处:http://blog.csdn.net/qinjuning 前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时 ...

  6. 【实习记】2014-09-01从复杂到简单:一行命令区间查重+长整型在awk中的bug

        9月1号,导出sql文件后,想到了awk,但很复杂.想到了用sed前期处理+python排序比较的区间查重法.编写加调试用了约3小时. 9月2号,编写C代码的sql语句过程中,发现排序可以交m ...

  7. Google Map 自定义 infowindow

    最近做的东西用到了infowindow,不过google提供的样式太难看了,于是想改变一下样式.看了一下好像infowindow的样式不太好改. 查了半天资料,看到一个infobox,感觉真的挺好用. ...

  8. H5小内容(二)

    音视频处理   视频处理     基本内容       使用Flash技术处理HTML页面中的视频内容         包含音频.动画.网页游戏等  特点    浏览器原生不支持(IE浏览器要求安装A ...

  9. CSS三角形广告文字

    街上经常碰到一些发各类广告传单的,有一次收到一张房地产广告的传单,顺手留下来,看着里面有些广告挺吸引人,同时也想练练自己css技术,故抽空做了一下. 原图某区域如下: 实现上图效果是需要一些想象力的, ...

  10. yii2单独给input或者其他标签定义class

    <?= $form->field($model, 'price5', ['options' => ['class' => 'col-sm-6']])->textInput ...