linux之rootfs (UBIFS)
转: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)的更多相关文章
- Linux系统在嵌入式硬件上的移植
========================= 基本常识 ========================= 一. Linux系统的基本构成: 1. loader 2. ...
- UBIFS
转:http://www.armadeus.com/wiki/index.php?title=UBIFS This is a preliminary page dealing with the ins ...
- 文件系统的挂载(2)---挂载rootfs文件系统
一.目的 本文主要讲述linux内核rootfs文件系统的挂载过程,内核版本为3.10. rootfs是基于内存的文件系统,没有实际的存储设备,所有操作都在内存中完成.为了保证linux内核的精简性, ...
- 使用ubifs格式的根文件系统
配置内核,使其支持ubifs文件系统 1)Device Drivers --->Memory Technology Device (MTD) support --->UBI - Uns ...
- 使用ubifs格式的根文件系统---过程记录
配置内核,使其支持ubifs文件系统 1)Device Drivers --->Memory Technology Device (MTD) support --->UBI - Uns ...
- EASYARM-IMX283 制作ubifs文件系统
ubifs主页:http://www.linux-mtd.infradead.org/doc/ubifs.html nandflash上常用的文件系统有jffs2.yaffs和ubifs,其中ubif ...
- Linux操作系统-CentOS6启动流程和服务管理
Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...
- learning docker steps(9) ----- arm linux docker 安装
参考:https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1 想要在arm linux上安装docker ...
- linux基础—课堂随笔010_系统启动和内核管理
系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, functio ...
随机推荐
- mysql innodb 数据表不存在
方法一: https://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html 修改my.cnf文件 [mysqld] innodb ...
- git+jenkins在windows机器上新建一个slave节点【转载】
转至博客:上海-悠悠 前言 我们在跑自动化项目的时候,希望有单独的测试机能跑自动化项目,并且能集成到jenkins上构建任务.如果公司已经有jenkins环境了,那无需重新搭建. 只需在现有的平台基础 ...
- hdu 3435(KM算法最优匹配)
A new Graph Game Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发
准备工作 腾讯云服务器(Ubuntu),C++编程语言 由于想输出界面中包含中文,所以安装库 libncursesw5,依次输入下面三行命令 sudo apt-get install libncurs ...
- highcharts高级画图柱状图和折线图
折线图一枚 $("#z_line").highcharts({ chart: { type: 'line' }, credits: { enabled: false // 禁用版权 ...
- 运行在CentOS7.5上的Django项目时间不正确问题
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...
- ffmpeg测试程序
ffmpeg在编译安装后在源码目录运行make fate可以编译并运行测试程序.如果提示找不到ffmpeg的库用LD_LIBRARY_PATH指定一下库安装的目录.
- 解析 Qt 程序在Windows 下发布
原文请看:http://www.cnblogs.com/elect-fans/archive/2012/03/15/2408579.html Qt 程序在Windows下发布是本文要介绍的内容,不多说 ...
- vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
本文简单分析了代码的结构.有助于理解. 转:http://www.freebuf.com/news/141442.html 0×01 事件分析 2017年7月19 unamer在其github上发布了 ...
- 欧拉图 欧拉回路 欧拉通路 Euler
欧拉图 本文链接:http://www.cnblogs.com/Ash-ly/p/5397702.html 定义: 欧拉回路:图G的一个回路,如果恰通过图G的每一条边,则该回路称为欧拉回路,具有欧拉回 ...