转:http://www.360doc.com/content/11/1208/15/3700464_170655736.shtml

大大小小事情一堆,好久不更新了,这次记录下移植ubifs文件系统步骤。

虽然通常是先kernel后rootfs,但是kernel要不停改,rootfs却必须得先存在,所以先搞定rootfs,rootfs采用据说是nand flash上最先进的ubifs。

http://www.busybox.net/下载busybox源代码,目前最新的稳定版本为1.18.1,解压至Workspaces。

以下切换到root用户进行操作(在其他用户模式下编译出来的rootfs登录时不是以root登录,好像是比较麻烦,简单起见先)

修改Makefile:

CROSS_COMPILE = /opt/arm-2010q1/bin/arm-none-linux-gnueabi-

ARCH = arm

保存退出后:

make menuconfig

1.18.1已经把make install目录默认改成./_install了。而且也不打算改成静态库,所以没啥好改的,看一看保存退出后:

make (生成busybox)

make install (生成文件到_install目录)

然后修改_install/bin/busybox权限:

chmod 4755 _install/bin/busybox

(给予busybox任何人可读可执行,所有者可读可写可执行,4读,2写,1执行,7=4+2+1,5=4+1,三者分别是所有者,所有者组,其他组。最前面的4表示其他用户执行该文件时,权限同所有者)

进入到_install目录创建linux需要的一些目录:

mkdir -p dev etc home lib mnt proc root sys tmp usr var/lib/misc var/lock var/log var/run var/tmp
并修改权限:

chmod 1777 tmp
chmod 1777 var/tmp

(最前面1防止被其他用户删除)

在dev下创建console和null设备:
mknod -m 660 console c 5 1
mknod -m 660 null c 1 3

(这两个设备用来供init启动时调用)

现在来看一下busybox需要哪些动态链接库,返回到busybox目录后输入:

/opt/arm-2010q1/bin/arm-none-linux-gnueabi-readelf -a busybox  | grep Shared

显示需要libm.so.6和libc.so.6

把交叉编译器里的library拷贝到_install/lib目录下,codesourcery的arm-2010q1,默认是armv5te,在目录
/opt
/arm-2010q1/arm-none-linux-gnueabi/libc下的lib中(对应ARMv4T在在armv4t中,对应armv7-
a
thumb2在thumb2中),鉴于以后的应用程序可能会用到除libm.so.6和libc.so.6外的这些库,因此全部拷过去,在
_install下执行:

cp /opt/arm-2010q1/arm-none-linux-gnueabi/libc/lib/*.so*  lib -a

然后在_install/etc下创建一些配置文件:

fstab

 #
# /etc/fstab: static file system information.
#
#
#
# file system mount type options dump pass
 
#for mdev
proc /proc proc defaults
sysfs /sys sysfs defaults #make sure /dev /tmp /var are tmpfs(tmpfs use ram as media) thus can be r/w
tmpfs /tmp tmpfs defaults
tmpfs /dev tmpfs defaults
tmpfs /var tmpfs defaults  #usbfs /proc/bus/usb usbfs defaults 0 0

fstab中的文件系统会被mount -a挂载。

inittab

 # see busybox/examples/inittab
 
 # Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
 ::sysinit:/etc/init.d/rcS  #Start an "askfirst" shell on the console (whatever that may be)
#use respawn instead askfirst to make sure console always active
 ::respawn:-bin/sh  # Stuff to do when restarting the init process
 ::restart:/sbin/init # Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

inittab会被init执行

init.d/rcS

 #!/bin/sh

 #add setting here for auto start program
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask
export PATH runlevel prevlevel #See docs/mdev.txt
#mount all fs in fstab,proc and sysfs are must for mdev
mount -a #create device nodes
echo /sbin/mdev >/proc/sys/kernel/hotplug #seed all device nodes
mdev -s #create pts directory for remote login such as SSH and telnet
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts if [ -f/etc/hostname ]; then
/bin/hostname -F/etc/hostname
fi if [ -e /sys/class/net/eth0 ]; then
ifconfig eth0 192.168.1.15
fi echo "etc init.d rcS done"

init.d/rcS会在开机时自动执行。

更改rcS和inittab的权限为777:

chmod 777 init.d/rcS

chmod 777 inittab

另外还有几个文件和目录:

rc.d目录,可以存放自启动的一些脚本

mdev.conf(内容可为空,也可参考busybox docs/mdev.txt)

profile

 #id -un = whoami
export USER="id -un"
export LOGNAME=$USER
export PATH=$PATH #a colorful prompt begin with "\e[" end with "m"
export PS1='\e[;32m\u@\e[;31m\h#\e[0m'

resolve.conf (是标注dns服务器的,就一句 nameserver 202.96.134.133)

hostname  (供init.d/rcS读取,就一个hostname名称,如mx27)

passwd,group,shadow用户/组/密码,可以用PC机上的替代,这里是一些说明:

代码

 passwd一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:
用户名
是否有加密口令,x表示有,不填表示无,采用MD5、DES加密。
用户ID
组ID
注释字段
登录目录
所使用的shell程序 Group一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:
组名
是否有加密口令,同passwd
组ID
指向各用户名指针的数组 shadow一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:
用户名
加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该账号被禁用。 上面的表示的是123456加密后的口令。
从1970年1月1日至口令最近一次被修改的天数
口令在多少天内不能被用户修改
口令在多少天后必须被修改(0为没有修改过)
口令过期多少天后用户账号被禁止
口令在到期多少天内给用户发出警告
口令自1970年1月1日被禁止的天数
保留域

现在除了lib/modules/`uname -r`/kernel下的文件(`uname -r`为开发板linux版本,可以输入echo `uname -r`查看),这个rootfs基本完成了。在www.infradead.org的FAQ里找到mkfs的git地址(汗,不好找):

git clone git://git.infradead.org/mtd-utils.git

cd mtd-utils

git describe master  (版本号是v1.3.1-138-gf0cc488)

进入mkfs.ubifs编译出错,在FAQ中看到需要3个库,安装之:

sudo apt-get install zlib1g-dev

sudo apt-get install liblzo2-dev

sudo apt-get install uuid-dev

make 成功产生mkfs.ubifs

接着把_install做成ubifs文件系统:

./mkfs.ubifs -r <path>/_install -m 512 -e 15360 -c 3897 -o ubifs.img

其中-m表示页面大小,-e表示逻辑擦除块大小,-c表示最大的逻辑擦除块数量,具体的可以通过barebox执行ubiattach的时候看到。

上电进入barebox:

erase /dev/nand0.root

ubiattach /dev/nand0.root

ubimkvol /dev/ubi0 root 0 (注意这里的名字必须跟bootargs匹配,默认为ubi0.root)

dhcp

tftp ubifs.img /dev/ubi0.root

linux之rootfs (UBIFS)的更多相关文章

  1. Linux系统在嵌入式硬件上的移植

    =========================        基本常识       ========================= 一. Linux系统的基本构成: 1. loader 2.  ...

  2. UBIFS

    转:http://www.armadeus.com/wiki/index.php?title=UBIFS This is a preliminary page dealing with the ins ...

  3. 文件系统的挂载(2)---挂载rootfs文件系统

    一.目的 本文主要讲述linux内核rootfs文件系统的挂载过程,内核版本为3.10. rootfs是基于内存的文件系统,没有实际的存储设备,所有操作都在内存中完成.为了保证linux内核的精简性, ...

  4. 使用ubifs格式的根文件系统

    配置内核,使其支持ubifs文件系统 1)Device Drivers  --->Memory Technology Device (MTD) support  --->UBI - Uns ...

  5. 使用ubifs格式的根文件系统---过程记录

    配置内核,使其支持ubifs文件系统 1)Device Drivers  --->Memory Technology Device (MTD) support  --->UBI - Uns ...

  6. EASYARM-IMX283 制作ubifs文件系统

    ubifs主页:http://www.linux-mtd.infradead.org/doc/ubifs.html nandflash上常用的文件系统有jffs2.yaffs和ubifs,其中ubif ...

  7. Linux操作系统-CentOS6启动流程和服务管理

    Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...

  8. learning docker steps(9) ----- arm linux docker 安装

    参考:https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1 想要在arm linux上安装docker ...

  9. linux基础—课堂随笔010_系统启动和内核管理

    系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, functio ...

随机推荐

  1. 一文看懂IC芯片生产流程:从设计到制造与封装

    http://blog.csdn.net/yazhouren/article/details/50810114 芯片制造的过程就如同用乐高盖房子一样,先有晶圆作为地基,再层层往上叠的芯片制造流程后,就 ...

  2. 理解rest架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  3. Linux平台用C++实现事件对象,同步线程(转)

    本文属于转载,原文链接如下:http://blog.csdn.net/chexlong/article/details/7080537 与其相关的一组API包括:pthread_mutex_init, ...

  4. 判断ArcSDE是否安装成功

    安装SDE后在ArcMap的Toolboxes - Data Management Tools中会新增Geodatabase Administration 即数据管理工具下面会新增地理数据库管理

  5. position:fixed部分版本的浏览器不支持

    ie6-ie8浏览器不支持这个属性 .fixed{         position:fixed; /*对于火狐等其他浏览器需要设置的*/         top:700px;  /*同上*/     ...

  6. servlet为什么要配置web.xml

    (1).为Servlet命名:  <servlet>  <servlet-name>servlet1</servlet-name> <- 这是用于,在serv ...

  7. ExecutorService 用例

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Tes ...

  8. 创建 OpenStack云主机 (十五)

    创建过程 创建虚拟网络 创建m1.nano规格的主机(相等于定义虚拟机的硬件配置) 生成一个密钥对(openstack的原理是不使用密码连接,而是使用密钥对进行连接) 增加安全组规则(用iptable ...

  9. redux saga学习

    来源地址:https://www.youtube.com/watch?v=o3A9EvMspig Saga的基本写法 takeEvery与takeLatest的区别 takeEvery是指响应每一个请 ...

  10. cordova热更新插件的使用

    cordova常用命令  一.添加插件 新建Cordova项目 cordova create CordovaHotCode com.ezample.hotcode 添加Android平台 在新建项目的 ...