转: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. Dev的js智能提示

    VS中"工具"->"选项"->"文本编辑器"->"JavaScript"->"Inte ...

  2. FineReport——函数

    1.VALUE(tableData,col,row)返回tableData中列号为col的值, 行号为row.备注:先从报表数据集中查找,然后再从服务器数据集中查找,返回的是tableData的行数. ...

  3. opencv 图像转换

    #include <cv.h> #include <highgui.h> int main() { CvPoint2D32f srcTri[], dstTri[]; CvMat ...

  4. 《深入浅出MyBatis技术原理与实战》——3. 配置

    要注意的是上面那些层次是不能够颠倒顺序的,否则MyBatis在解析文件的时候就会出现异常. 3.1 properties元素 properties是一个属性配置元素,让我们能在配置文件的上下文中使用它 ...

  5. 爬虫基础库之requests

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  6. Efficient Graph-Based Image Segmentation

    转:http://blog.csdn.net/asongoficeandfire/article/details/8434799 Efficient Graph-Based Image Segment ...

  7. JQuery 获取页面某一元素的位置

    获取页面某一元素的绝对X,Y坐标 var X = $('#ElementID').offset().top; var Y = $('#ElementID').offset().left; 获取相对(父 ...

  8. vue验证码组件

    1.效果图 2.全部代码: <template> <div class="join_formitem"> <label class="enq ...

  9. Java中 @override 报错

    报错问题: 在我们导入别人的项目的时候有可能会出现Java类报错,点击错误时提示让我们remove掉@override.这是JDK版本的问题导致的跟源码无关. 解决方法: 方案1.直接删除掉报错的@o ...

  10. 图片乱码问题 解决方法 php

    两个开发者都是下载同一个项目的git代码,但到本地环境,一个可以正常显示图片验证码,一个不行,找个半天开始以为环境问题 找了半天 不是 很多没说到重点 其实不只是当前文件格式问题 也要考虑其他调用文件 ...