🌹1 下载工具
busybox-1.21.1:或选用其他版本的 busybox,大同小异 下载地址:工具链接
?2 构建目录
创建根文件系统目录,主要包括以下目录 /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /opt /sys /media 命令如下:
mkdir ~/rootfs
cd ~/rootfs
mkdir dev etc lib usr var proc tmp home root mnt bin sbin opt sys media
🚀3 使用busybox
解压 busubox 进入 busybox 目录,执行
make defconfig //使用默认配置 busybox,大部分的命令都会被选 中 # 进入图形化配置页面,把下面的选项都勾上 make menuconfig Busybox Setting -----> Build Options ----->//选择将 busybox 进行静态编译,这样编译出来的 busybox 可以不依赖动态库 Busybox Library Tuning—> []Username completion []Fancy shell prompts [*]Query cursor position from terminal 保存退出
回到busybox目录下执行下面语句
make
make install
cp * ~/rootfs/ -arf
在 busybox 目录下cd 进入 _install 目录,里面有 bin sbin usr linuxrc 四个文件 将这三个目录或文件拷到第一步所建的 rootfs 文件夹下。
cp bin sbin usr linuxrc $HOME/rootfs -rfa
4 🍎补全lib库
找到你工具链中的lib目录拷贝到你的根文件目录中,我用的是arm-linux-gcc的lib
5 🍏生成etc配置文件
进入到 busybox-1.21.1下查找etc,并复制到你的根文件目录下 进入到etc/的inittab 删除第三行代码:tty2::askfirst:-/bin/sh
6 🍇修改 etc/init.d/rcS 文件
init 进程通过 inittab 启动的第一个进程为此脚本,我们需要做以下修改#!/bin/sh
🌸6.1.根据 fstab 配置文件挂载相应的文件系统
/bin/mount -a
🐟6.2.配置 telnetd 服务器的时候需要以下文件夹及文件系统
/bin/mkdir -p /dev/pts /bin/mkdir -p /dev/shm /bin/mount -t devpts devpts /dev/pts /bin/mount -t tmpfs tmpfs /dev/shm
🌺6.3.启动需要以下文件夹
/bin/mkdir /var/tmp /bin/mkdir /var/modules /bin/mkdir /var/run /bin/mkdir /var/log
🐬6.4.在 lib 下创建相应文件夹(与当前内核版本相同),为驱动模块加载作准备
if ! [ -d /lib/modules ]; then mkdir /lib/modules fi if ! [ -d /lib/modules/
(
u
n
a
m
e
?
r
)
]
;
t
h
e
n
m
k
d
i
r
/
l
i
b
/
m
o
d
u
l
e
s
/
(uname -r) ]; then mkdir /lib/modules/
(uname?r)];thenmkdir/lib/modules/(uname -r) fi
👑6.5.自动在/dev 下创建设备节点
/sbin/mdev -s
init.d/rsc文件下的编写
#! /bin/sh
/bin/mount-a
/bin/mkdir -p /dev/pts
/bin/mkdir -p /dev/shm
/bin/mount -t devpts devpts /dev/pts
/bin/mount -t tmpfs tmpfs /dev/shm
/bin/mkdir /var/tmp
/bin/mkdir /var/modules
/bin/mkdir /var/run
/bin/mkdir /var/log
if ! [ -d /lib/modules ]; then
mkdir /lib/modules
fi
if ! [ -d /lib/modules/$(uname -r) ]; then
mkdir /lib/modules/$(uname -r)
fi
/sbin/mdev -s
👏7 修改 etc/fstab 文件,填充以下内容
#device mount-point type options dump fask order
proc /proc proc defaults 0 0
ramfs /var ramfs defaults 0 0
ramfs /tmp ramfs defaults 0 0
none /sys sysfs defaults 0 0
none /dev ramfs defaults 0 0
🌹8 修改 profile
#1.初始化 PATH 环境变量及动态链接库路径
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
#2.初始化主机名以及当前工作路径
/bin/hostname qfedu
USER="`id -un`"
LOGNAME=$USER
HOSTNAME='/bin/hostname'
PS1='[\u@\h \W]#
?9 用户名、密码文件创建
拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadow 到 rootfs/etc 下。
#cp /etc/passwd $HOME/rootfs/etc
#cp /etc/group $HOME/rootfs/etc
#cp /etc/shadow $HOME/ rootfs/etc
对以下三个文件修改,只保存与 root 相关的项(每个文件的第一行)只保留 passwd 第一行,为:
root:x:0:0:root:/root:/bin/sh
最后改成/bin/ash,PC 使用 bash 作为默认 shell,嵌入式系统不支持 bash,这里改为 sh 或 ash
只保留 group 第一行,为: root:x:0:root
只保留 shadow 第一行,为: root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7::: (注意这个值不一定一样,各人密码不一样,这个值也不一样,这个的密码是六个1: 111111)这个文件在本地登录或者 ftp、telnet 登录时起作用
打开/etc/inittab 把第二行:::respawn:-/bin/sh 改为::respawn:-/bin/login //登录时需要用户名、密码验证 这样,以后登陆开发板时需输入用户名密码,同虚拟机相同 登陆后可以通过 passwd 命令修改密码或通过 adduser 增加新用户
这时我配置的结果
💒10 根文件系统的烧写与验证
根文件系统的挂载通常有两种方式,一种是直接烧尽Emmc里面,一种是通过NFS网络文件系统远程挂载,这里采用NFS挂载的方式进行验证 首先在Ubuntu下配置rootfs远程挂载 sudo gedit /etc/exports
输入/home/edu/rootfs *(rw,sync,no_root_squash,no_subtree_check) 重启NFS服务器:sudo /etc/init.d/nfs-kernel-server restart
11 使用uboot挂载根文件系统
启动开发板的uboot 执行以下命令:提供一个模板 模板: setenv bootargs root=/dev/nfs nfsroot=(虚拟机路径),rsize=1024,wsize=1024 ip=(开发板 iP):(服务器 ip):(网关):255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
执行后用:saveenv保存,重新启动开发板查看是否进入你的根文件系统
这是我的挂载场景:
12 还原原始的根文件系统
执行下面两条语句并重启开发板
setenv bootargs root=/dev/mmcblk0p8 rw rootfstype=ext4 init=/linuxrc lcd=wy070ml tp=gslx680 saveenv
|