- 1 下载工具
- ☕2 构建目录
- 3 使用busybox
- 4 补全lib库
- 5 生成etc配置文件
- 6 修改 etc/init.d/rcS 文件
- 6.1.根据 fstab 配置文件挂载相应的文件系统
- 6.2.配置 telnetd 服务器的时候需要以下文件夹及文件系统
- 6.3.启动需要以下文件夹
- 6.4.在 lib 下创建相应文件夹(与当前内核版本相同),为驱动模块加载作准备
- 6.5.自动在/dev 下创建设备节点
- 7 修改 etc/fstab 文件,填充以下内容
- 8 修改 profile
- ☕9 用户名、密码文件创建
- 10 根文件系统的烧写与验证
- 11 使用uboot挂载根文件系统
- 12 还原原始的根文件系统
busybox-1.21.1:或选用其他版本的 busybox,大同小异
下载地址:工具链接
创建根文件系统目录,主要包括以下目录
/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 media3 使用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 文件夹下。
4 补全lib库cp bin sbin usr linuxrc $HOME/rootfs -rfa
找到你工具链中的lib目录拷贝到你的根文件目录中,我用的是arm-linux-gcc的lib
进入到 busybox-1.21.1下查找etc,并复制到你的根文件目录下
进入到etc/的inittab 删除第三行代码:tty2::askfirst:-/bin/sh
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
/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/
(
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
/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 -s7 修改 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 08 修改 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 根文件系统的烧写与验证这时我配置的结果
11 使用uboot挂载根文件系统根文件系统的挂载通常有两种方式,一种是直接烧尽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
启动开发板的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



