rootfs和ramdisk的制作

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
 1、ramdisk是一个最小的linux rootfs系统,它包含了除内核以外的所有linux系统在引
导和管理时需要的工具,包含如下目录:bin,dev,etc,home,lib,mnt,proc,sbin,usr,va
r。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin目录中);必要的配置文
件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/co
nsole,
/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。

2、首先建立一个空的ramdisk image文件:
xuxian@omap1:~$cd /home/xuxian/fsys
xuxian@omap1:~$dd if=/dev/zero of=rootfs bs=1M count=16
ramdisk image文件名为rootfs,大小为16M。
把它格式化为你需要的文件系统,比如 ext2 ,ext3等。
比如ext3 :
xuxian@omap1:~$mkfs.ext3 -m 0 -N 2000 ./rootfs
这里的-N 2000表示最大的node数为2000。因为linux的设备也是基于文件系统的,需要
占用文件系统的node,如果数目建立的太少,以后可能会不够用。
然后把它mount到某个目录:
xuxian@omap1:~$mkdir ramdisk
xuxian@omap1:~$mount -t ext3 -o loop ./rootfs ./ramdisk
xuxian@omap1:~$cd ramdisk
xuxian@omap1:~$ls
xuxian@omap1:~$lost+found
通过这一步,已经得到一个空的ramdisk image文件了。

3、建立各个目录:
xuxian@omap1:~/fsys/ramdisk$mkdir dev
xuxian@omap1:~/fsys/ramdisk$mkdir proc
xuxian@omap1:~/fsys/ramdisk$mkdir etc
xuxian@omap1:~/fsys/ramdisk$mkdir sbin
xuxian@omap1:~/fsys/ramdisk$mkdir bin
xuxian@omap1:~/fsys/ramdisk$mkdir lib
xuxian@omap1:~/fsys/ramdisk$mkdir mnt
xuxian@omap1:~/fsys/ramdisk$mkdir usr
xuxian@omap1:~/fsys/ramdisk$mkdir tmp
xuxian@omap1:~/fsys/ramdisk$mkdir root
xuxian@omap1:~/fsys/ramdisk$mkdir home
xuxian@omap1:~/fsys/ramdisk$mkdir var
xuxian@omap1:~/fsys/ramdisk$mkdir usr/bin
xuxian@omap1:~/fsys/ramdisk$mkdir usr/sbin
xuxian@omap1:~/fsys/ramdisk$mkdir usr/lib

对单用户来说,home和root不是必须的。

4、/dev目录:

omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 console c 5 1
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 666 tty c 5 0
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 tty0 c 4 0
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 ttyS0 c 4 64

也可以用一种简单的方法来创建/dev里面的文件:首先你要下载一个文件系统

omap1:/home/xuxian/fsys/ramdisk/dev$cp -dpR /home/xuxian/osk/rootfs2.6/dev/*
.
这个命令把下载的文件系统的/dev目录拷贝到ramdisk的/dev中。dp参数表示符号连接拷
贝为符号连接,不拷贝连接的符号,并且拷贝源文件的所有属性。

5、/lib目录:

下面是arm-linux的动态库,可以选择一些必须的拷贝到ramdisk的lib下。
omap1:/home/iaadoa/work/crosstool/gcc-3.3.2-glibc-2.3.2/arm-linux/arm-linux/l
ib# ls
crt1.o                    libc_nonshared.a   libmcheck.a            
libnss_hesiod.so.2       librt.a
crti.o                    libcrypt-2.3.2.so  libmemusage.so         
libnss_nis-2.3.2.so      librt.so
crtn.o                    libcrypt.a         libm.so                
libnss_nisplus-2.3.2.so  librt.so.1
gconv                     libcrypt.so        libm.so.6              
libnss_nisplus.so        libSegFault.so
gcrt1.o                   libcrypt.so.1      libnsl-2.3.2.so        
libnss_nisplus.so.2      libstdc++.a
ld-2.3.2.so               libc.so            libnsl.a               
libnss_nis.so            libstdc++.la
ld-linux.so.2             libc.so.6          libnsl.so              
libnss_nis.so.2          libstdc++.so
ldscripts                 libc.so_orig       libnsl.so.1            
libpcprofile.so          libstdc++.so.5
libanl-2.3.2.so           libdl-2.3.2.so     libnss_compat-2.3.2.so 
libpthread-0.10.so       libstdc++.so.5.0.5
libanl.a                  libdl.a            libnss_compat.so       
libpthread.a             libsupc++.a
libanl.so                 libdl.so           libnss_compat.so.2     
libpthread_nonshared.a   libsupc++.la
libanl.so.1               libdl.so.2         libnss_dns-2.3.2.so    
libpthread.so            libthread_db-1.0.so
libBrokenLocale-2.3.2.so  libg.a             libnss_dns.so          
libpthread.so.0          libthread_db.so
libBrokenLocale.a         libgcc_s.so        libnss_dns.so.2        
libpthread.so_orig       libthread_db.so.1
libBrokenLocale.so        libgcc_s.so.1      libnss_files-2.3.2.so  
libresolv-2.3.2.so       libutil-2.3.2.so
libBrokenLocale.so.1      libiberty.a        libnss_files.so        
libresolv.a              libutil.a
libbsd-compat.a           libieee.a          libnss_files.so.2      
libresolv.so             libutil.so
libc-2.3.2.so             libm-2.3.2.so      libnss_hesiod-2.3.2.so 
libresolv.so.2           libutil.so.1
libc.a                    libm.a             libnss_hesiod.so       
librt-2.3.2.so           Mcrt1.o



以下这些是必须的:

ld-2.3.2.so               libmemusage.so           libnss_nisplus.so.2
ld-linux.so.2             libm.so.6                libnss_nis.so.2
libanl-2.3.2.so           libnsl-2.3.2.so          libpcprofile.so
libanl.so.1               libnsl.so.1              libpthread-0.10.so
libBrokenLocale-2.3.2.so  libnss_compat-2.3.2.so   libpthread.so.0
libBrokenLocale.so.1      libnss_compat.so.2       libresolv-2.3.2.so
libc-2.3.2.so             libnss_dns-2.3.2.so      libresolv.so.2
libcrypt-2.3.2.so         libnss_dns.so.2          librt-2.3.2.so
libcrypt.so.1             libnss_files-2.3.2.so    librt.so.1
libc.so.6                 libnss_files.so.2        libSegFault.so
libdl-2.3.2.so            libnss_hesiod-2.3.2.so   libthread_db-1.0.so
libdl.so.2                libnss_hesiod.so.2       libthread_db.so.1
libgcc_s.so.1             libnss_nis-2.3.2.so      libutil-2.3.2.so
libm-2.3.2.so             libnss_nisplus-2.3.2.so  libutil.so.1

拷贝到ramdisk的lib目录下就行了。

6、安装busybox:

下载busybox-1.01
xuxian@omap1:~/osk$tar -xjvf busybox-1.01.tar.bz2
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk menuconfig
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk dep
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk inatall
xuxian@omap1:~/fsys/ramdisk/bin$ls
addgroup  chown     dmesg   gzip      login  netstat  sed    true
adduser   cp        echo    hostname  ls     pidof    sh     umount
ash       date      egrep   ip        mkdir  ping     sleep  uname
busybox   dd        false   ipaddr    mknod  ps       su     usleep
cat       delgroup  fgrep   iproute   more   pwd      sync   vi
chgrp     deluser   grep    kill      mount  rm       tar    zcat
chmod     df        gunzip  ln        mv     rmdir    touch
这些就是可用的命令。

7、/etc下系统配置文件说明:

xuxian@omap1:~/fsys/ramdisk/etc/$vi inittab
#
# This is run first except when booting in single-user mode
#指定初始化文件

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

# /bin/sh
#
# Start an "askfirst" shell on the console (whatever that may be)
#启动时执行的shell

::askfirst:-/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

再来编写rcS脚本:

xuxian@omap1:~/fsys/ramdisk/etc/$mkdir init.d

xuxian@omap1:~/fsys/ramdisk/etc/$cd init.d

xuxian@omap1:~/fsys/ramdisk/etc/init.d$vi rcS
脚本如下:

#!/bin/sh

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

HOSTNAME=OMAP5912OSK
hostname $HOSTNAME
echo ""
echo "******************************************"
echo "Starting System Init for $HOSTNAME"
echo "******************************************"

# goto the init.d directory
cd /etc/init.d

# Mount the default file systems
mount -a # Mount the default file systems

# Configure network
#/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255
#/sbin/ifconfig eth0 128.247.75.151 netmask 255.255.254.0 broadcast
128.247.75.255
#/sbin/route add default gw 128.247.74.1 eth0

然后时rcS2脚本:

xuxian@omap1:~/fsys/ramdisk/etc/init.d$vi rcS2

#!/bin/sh
/bin/mount -n -o remount,rw /

/bin/mount -a
echo Starting Network
#modprobe i2c-core
#modprobe i2c-algo-bit
#modprobe i2c-omap1510
#modprobe soundcore
#modprobe omap-audio
#modprobe omap1510-aic23

/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
/sbin/ifconfig eth0 10.1.3.3 netmask 255.255.0.0 broadcast 10.1.255.255
/sbin/route add default gw 10.1.0.100 eth0
~
~

最后时编写fstab脚本,我的很简单:

xuxian@omap1:~/fsys/ramdisk/etc$vi fstab
proc            /proc           proc    defaults        0       0

8、用nfs检查根文件系统:

做完以上这些就可以用nfs来启动目标系统了。编辑/etc/exports加入/home/xuxian/fsy
s/ramdisk 192.168.4.190(rw,sync,no_root_squash,no_all_squash)其中192.168.4.19
0是目标板的ip。
连接目标板用tftp或者串口线下载u-boot和kernel,在u-boot的环境变量中加入:seten
v bootargs console=ttyS0,115200n8 noinitrd rw ip=dhcp root=/dev/nfs
nfsroot=192.168.0.11:/home/xuxian/fsys/ramdisk,nolock mem=30M其中192.168.0.11
是主机ip,/home/xuxian/fsys/ramdisk为ramdisk目录。

9、通过烧写flash检查文件系统

最后如果想生成image文件烧到flash中可以执行如下命令:

xuxian@omap1:~/fsys$umount ramdisk
xuxian@omap1:~/fsys$gzip -v9 rootfs

这样就生成了rootfs.gz文件,可以连同u-boot,kernel一起烧到flash中了。
android img 制作工具,Android 镜像文件制作ramdisk.img system.img userdata.img】 Android项目生成的镜像文件包括ramdisk.img, system.img, userdata.imgramdisk.img 是out/target/product/项目名/root 目录经过打包压缩而成; system.img是out/target/product/项目名/system目录打包压缩而成; userdata.img是out/target/product/项目名/data目录... 阅读详情

相关推荐

编译使用QEMU运行riscv linux内核

执行配置、编译安装。

zjc156m的专栏 715

爱快路由研究中关于rootfs.gz文件的解压缩问题

爱快路由研究中关于rootfs.gz文件的解压缩问题 友情提示,如果你看完标题,不知道我要说什么,请直接关闭这个页面,免得浪费你的时间. rootfs.gz文件格式分析 这个文件的头部信息比较特别,开头的字节是FD377A585A ) 在网上查询后,确认是xz文件格式,网站介绍如下: 所以改名为rootfs.xz,但是改名后无法解压缩,后来在官网上找到一个标准的xz文件,比较发现,文件尾部有些奇...

zzlufida的博客 3635

[RK3399 Linux] 使用busybox 1.36.1制作rootfs

[RK3399 Linux] 使用busybox 1.36.1制作rootfs

Systemcall名屋 654

Debian 文件系统制作

转载在https://whycan.cn/t_2666.html 运行环境在ubuntu 18.04 0. 准备工作 sudo apt install qemu-user-static -y sudo apt install debootstrap -y mkdir rootfs 1.debootstrap 用的是清华大学开源软件镜像用其中一个 debootstrap --...

yytyu2017的博客 1344

ramfs、tmpfs、rootfsramdisk介绍

内核在启动初始化过程中会解压缩initrd文件,然后将解压后的initrd挂载为根目录,然后执行根目录中的/init脚本(cpio格式的initrd为/init,而image格式的initrd为/initrc),您就可以在这个脚本中运行initrd文件系统中的udevd,让它来自动加载realfs(真实文件系统)存放设备的驱动程序以及在/dev目录下建立必要的设备节点。ramdisk的大小是固定的,安装在其上的文件系统大小也是固定的。

团长的专栏 3283

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容 直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容 直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

weixin_55163060的博客 1547

根文件系统rootfs的移植及制作镜像ramdisk.img

根文件系统的移植 介绍 【1】移植根文件系统的工具 —> busybox 1. 短小精悍 2. 版本更新较快,版本之间差异不大 【2】 如何获取busybox 1)https://busybox.net/downloads/ 选择busybox-1.32.0.tar.bz2版本 2)前往我的博客里下载 使用busybox工具制作根文件系统 1. 拷贝busybox-1.32.0.tar.bz2到ubuntu中 2. 解压缩 tar -vxf busybox-1.32.0.tar.b

weixin_48498880的博客 4176

利用busybox制作android下的ramdisk启动盘

有时候急了还就记不起来了,记录下。 step 1 :源码下载 到这里 http://www.busybox.net/  下载最新的busybox源码 直接下载源码包 或者git://git.busybox.net/busybox  用git来下载。 step 2: 编译busybox 进入busybox源码根目录,然后 make menuconfig 这里几个选项注意下 Bui

Qiang的专栏 2436

linux rootfs.img的制作

linux rootfs.img的制作 cramfs是只读压缩的文件系统,文件系统类型可以是ext2,ext3,什么的,  cramfsromfs只是一个文件系统类型,ramdisk相当于一块硬盘空间,可以理解为在内存中虚拟出一块硬盘来,所以它上面就可以有你linux支持的各种文件系统什么的。所以你问的,它romfscramfs确实不是一个层次的概念。 ^-^恭喜你,你答

prownd的专栏 8160

Linux内核移植 | 制作 rootfs

Linux内核启动后,需要挂载根文件系统。本章介绍文件系统的制作过程,留几个参考链接。1)自动生成: RAMDIRK。2)手工制作: ROOTFS

本末实验室 539

android rootfs 编译,android rootfs

ramdisk.img是编译Android生成的一个镜像文件,最后kernel一起打包生成boot.img镜像。ramdisk.img中主要是存放android启动后第一个用户进程init可执行文件init.*.rc等相关启动脚本以及sbin目录下的adbd工具。file ramdisk.img//ramdisk.img: gzip compressed data, from Unix看出为g...

weixin_39639550的博客 515

利用busybox制作zedboard使用的rootfs

FHS(Filesystem Hierarchy Standard)标准介绍 /bin 必备的用户命令,例如ls、cp等 /sbin 必备的系统管理员命令,例如ifconfig、reboot等 /dev 设备文件,例如mtdblock0、tty1等 /etc 系统配置文件,包括启动文件,例如inittab等 /lib 必要的链接库,例如C链接库、内核模块 /home 普通用户主目录 /root r...

Huskar_Liu的博客 810

AM335x(TQ335x)学习笔记——挂载Ramdisk

上篇文章中我们已经能够通过u-boot启动内核了,但是没有能够启动成功,从内核的log中可以看出,内核启动失败的原因是没有挂载到root文件系统,本文将使用busybox制作根文件系统并打包成ramdisk供u-boot启动内核使用。 (1)制作根文件系统 使用busybox构建根文件系统的步骤可以参考本博客的另外一篇文章“S5PV210(TQ210)学习笔记——内核移植与文件系统构建”,该文

girlkoo的专栏 1万+

linux pv镜像,制作PV8900开发板的linux系统镜像

烧写到开发板上的文件包括以下3个:ltcboot.rom --------------------------(bootloader)llinux.rom ------------------------------(Linux kernel)lramdisk.rom --------------------------(作为根文件系统的ramdisk)1,建立开发环境用户在使用PV8900进行开...

weixin_39609620的博客 182

initramfs文件系统

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33716557的博客 377

使用Busybox做一个小巧的Linux操作系统

1.基础知识 一个操作系统可以简单的抽象为,引导程序 内核 文件系统。   vmlinuz是Linux 内核的镜像文件,可以被引导程序加载,从而启动Linux系统。   initrd的全称是boot loader initialized RAM disk,它是系统启动时所使用的根文件系统映像文件,这个文件系统中包含几个驱动模块,用来装载实际的根文件系统,比如一个IDE或SCSI硬盘

leeagle的专栏 1335

linux2.6内核initrd机制解析

题记 很久之前就分析过这部分内容,但是那个时候不够深入,姑且知道这么个东西存在,到底怎么用,来龙去脉咋回事就不知道了。前段时间工作上遇到了一个initrd的问题,没办法只能再去研究研究,还好,有点眉目,索性整理了一下。 网络上流传着很多关于ramdisk、initrd的各种版本的分析,我的这篇源于对他们的理解,非常感谢那些前辈的无私奉献,要不然我们这些晚辈学起东西来该是多么艰难呀。在这里需要特

wenwuge_topsec的专栏 909
上一篇: yaffs2文件系统制作 .
下一篇: 使用arm-linux-gcc 4.3.2编译必须启用内核中的Use the ARM EABI选项
flymachine
博客等级 码龄23年 252粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值