转: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. 64_a1

    AGReader-1.2-16.fc26.x86_64.rpm 13-Feb-2017 23:31 50654 ATpy-0.9.7-11.fc26.noarch.rpm 13-Feb-2017 22 ...

  2. caffe Python API 之卷积层(Convolution)

    1.Convolution层: 就是卷积层,是卷积神经网络(CNN)的核心层. 层类型:Convolution lr_mult: 学习率的系数,最终的学习率是这个数乘以solver.prototxt配 ...

  3. UNIX shell 学习笔记 一 : 几个shell的规则语法对比

    1. 查看系统有哪些可用的shell cat /etc/shell 2. 每种shell都有一个特殊内置变量来存上一条命令的退出状态,例: C/TC shell $status % cp fx fy ...

  4. 微信支付之SHA256签名失败

    在接微信支付的时候,或多或少会遇到签名失败,本人接入的时候也遇了不少次: 总结如下: 1.参数没有经过ASCII排序 2.参数包含中文未经过UTF-8标准转化加密后的签名不对应(经本人测验:加密算法要 ...

  5. FineReport——权限分配以及自定义首页

    权限分配可以有两种方法,第一种方法是根据部门职位分配权限,第二种是根据角色分配权限: FR自带有三个JQ对象,用以保存用户名参数/角色参数/部门参数——$fr_username/$fr_authori ...

  6. html5重力感应事件之DeviceMotionEvent

    前言 今天主要介绍一下html5重力感应事件之DeviceMotionEvent,之前我的一篇文章http://www.haorooms.com/post/jquery_jGestures, 介绍了第 ...

  7. linux命令(20):rm命令

    1. 强行删除文件,系统不再确认:rm –f test.log 2. 删除任何.log文件:rm *.log 3. 将test子目录及子目录中所有档案删除:rm –r  test 4. 将 test子 ...

  8. connect-falsh的用法

    借鉴博客 http://yunkus.com/connect-flash-usage/

  9. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  10. hive的窗口函数1

    Hive中提供了越来越多的分析函数,用于完成负责的统计分析.抽时间将所有的分析窗口函数理一遍,将陆续发布.今天先看几个基础的,SUM.AVG.MIN.MAX.用于实现分组内所有和连续累积的统计. 1. ...