linux之rootfs (UBIFS)

发布时间:2024-09-02  

以下切换到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下创建一些配置文件:


1 #

2 # /etc/fstab: static file system information.

3 #

4 #

5 #

6 # file system mount type options dump pass

7  

8 #for mdev

9 proc /proc proc defaults 00

10 sysfs /sys sysfs defaults 00

11

12 #make sure /dev /tmp /var are tmpfs(tmpfs use ram as media) thus can be r/w

13 tmpfs /tmp tmpfs defaults 00

14 tmpfs /dev tmpfs defaults 00

15 tmpfs /var tmpfs defaults 00

16

17  #usbfs /proc/bus/usb usbfs defaults 0 0


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


1 # see busybox/examples/inittab

2  

3  # Boot-time system configuration/initialization script.

4 # This is run first except when booting in single-user mode.

5  ::sysinit:/etc/init.d/rcS

6

7  #Start an 'askfirst' shell on the console (whatever that may be)

8 #use respawn instead askfirst to make sure console always active

9  ::respawn:-bin/sh

10

11  # Stuff to do when restarting the init process

12  ::restart:/sbin/init

13

14 # Stuff to do before rebooting

15 ::ctrlaltdel:/sbin/reboot

16 ::shutdown:/bin/umount -a -r

17 ::shutdown:/sbin/swapoff -a

18

19


inittab会被init执行


1 #!/bin/sh

2

3 #add setting here for auto start program

4 PATH=/sbin:/bin:/usr/sbin:/usr/bin

5 runlevel=S

6 prevlevel=N

7 umask 022

8 export PATH runlevel prevlevel

9

10 #See docs/mdev.txt

11 #mount all fs in fstab,proc and sysfs are must for mdev

12 mount -a

13

14 #create device nodes

15 echo /sbin/mdev >/proc/sys/kernel/hotplug

16

17 #seed all device nodes

18 mdev -s

19

20 #create pts directory for remote login such as SSH and telnet

21 mkdir -p /dev/pts

22 mount -t devpts devpts /dev/pts

23

24

25

26 if [ -f/etc/hostname ]; then

27 /bin/hostname -F/etc/hostname

28 fi

29

30 if [ -e /sys/class/net/eth0 ]; then

31 ifconfig eth0 192.168.1.15

32 fi

33

34 echo 'etc init.d rcS done'

35


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


更改rcS和inittab的权限为777:


chmod 777 init.d/rcS


chmod 777 inittab


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


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


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


profile


1 #id -un = whoami

2 export USER='id -un'

3 export LOGNAME=$USER

4 export PATH=$PATH

5

6 #a colorful prompt begin with 'e[' end with 'm'

7 export PS1='e[1;32mu@e[1;31mh#e[0m'


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


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


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


1 passwd一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:

2 1 用户名

3 2 是否有加密口令,x表示有,不填表示无,采用MD5、DES加密。

4 3 用户ID

5 4 组ID

6 5 注释字段

7 6 登录目录

8 7 所使用的shell程序

9

10 Group一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:

11 1 组名

12 2 是否有加密口令,同passwd

13 3 组ID

14 4 指向各用户名指针的数组

15

16 shadow一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:

17 1 用户名

18 2 加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该账号被禁用。 上面的表示的是123456加密后的口令。

19 3 从1970年1月1日至口令最近一次被修改的天数

20 4 口令在多少天内不能被用户修改

21 5 口令在多少天后必须被修改(0为没有修改过)

22 6 口令过期多少天后用户账号被禁止

23 7 口令在到期多少天内给用户发出警告

24 8 口令自1970年1月1日被禁止的天数

25 9 保留域


现在除了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 /_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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    stm32用什么软件写程序;  stm32用什么软件写程序?STM32单片机在编程时可以使用库函数和使用配置寄存器的方式来进行程序的实现。   在学习stm32的过程中我们会用到编程环境:Keil......
    stm32单片机用什么软件编程;  今天要和大家分享的是stm32单片机用什么软件编程相关信息。   想学单片机开发,最主要是熟悉stm32的软件开发环境,目前stm32的开发环境,主流是KEIL和......
    单片机编程用什么软件?单片机开发软件有哪些?;单片机编程需要的软件其实不多,网上看了很一大堆,什么protues仿真、Labview、Pycharm等等,其实完全没必要一下装这么多。 我从......
    形式为DIP40,相信大家在大学里学单片机的时候老师都是用这一款教的吧。 3 硬件原理设计 芯片选型完毕之后,又有了设计思路,那就赶快把电路图画出来吧。画电路图用什么软件呢?这样的EDA工具很多,像......
    .安装需要的芯片库,找到STM32CubeMX软件打开 2.在电脑联网状态下,在我们选择新建工程时若没有你需要的芯片库软件会自动安装,也可以选择手动安装。 3.有网络的情况下安装芯片库 4 本地......
    是GUI Guider v1.7.0增加的主要功能: 界面设计界面 ● 双击工程文件打开GUI Guider ● 系统设置:修改屏幕类型,设置键盘参数 ● 新增LVGL widgets应用 ● 工程......
    行openocd这个gdb server,需要配置如下几个参数: 用什么仿真器?(J-link, ST-link…) 用什么接口?(JTAG, SWD…) 目标芯片是什么?(STM32F4x......
    openocd。 要运行openocd这个gdb server,需要配置如下几个参数: 用什么仿真器?(J-link, ST-link…) 用什么接口?(JTAG, SWD…) 目标芯片是什么......
    某些情况下精度仍然受限,如在复杂的背景下,图像分析和处理的精度受到影响。   做机器视觉用什么软件好   做机器视觉需要使用一些专业的软件,以下是几个比较好的机器视觉软件:   OpenCV:OpenCV是一......
    openocd。 要运行openocd这个gdb server,需要配置如下几个参数: 用什么仿真器?(J-link, ST-link…) 用什么接口?(JTAG, SWD…) 目标芯片是什么......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>