构造嵌入式Linux最小根文件系统及其 Busybox、libc运行库
构造嵌入式Linux最小根文件系统及其 Busybox、libc运行库
要求
型号:JZ2440
1. busybox
2. /dev静态设备 /etc/inittab + glibc + 文件系统镜像
声明交叉编译环境变量export PATH=$PATH:$GCC_S3C
Busybox
切换到工作目录,然后复制源码压缩包并解压
cp /mnt/hgfs/VM_Share/system/busybox-1.7.0.tar.bz2 ./
tar -xjf busybox-1.7.0.tar.bz2
cd busybox-1.7.0/
内容如下
#查看安装说明
cat INSTALL
#菜单配置
make menuconfig
出现Makefile报错,借助搜索引擎解决
https://zhuanlan.zhihu.com/p/31998962
然后继续配置
勾上TAB补全
ARCHIVAL UTILITILE 确认已勾选TAR
Linux module Utilities 确认已勾选 insmod
Linux system Utilities 确认已勾选 mdev
Networking Ulitie 检查勾选需要的工具/协议栈
Exit-Save即可
然后指定安装目录编译输出
make CONFIG_PREFIX=/work/nfs_root/first_fs install
发现警告和报错
由于暂不需要修改源代码,所以无需理会警告。
只处理错误,这里 /usr/ 不是源码目录而是编译机上的系统目录,所以可以推断是库的问题,回想一下之前没有指定交叉编译工具前缀 CROSS_COMPILE
所以只需要改一下 Makefile 或者在make命令后加上参数,由于不考虑移植,所以这里选择修改Makefile
创建NFS工作目录,为后续使用NFS构建文件
sudo mkdir -p /work/nfs_root/first_fs
这里提示没有权限,所以直接提权为root用户
sudo su
并声明交叉编译的局部环境变量
export GCC_S3C=/opt/gcc-3.4.5-glibc-2.3.6/bin
export PATH=\$PATH:\$GCC_S3C
再编译输出即可
make CONFIG_PREFIX=/work/nfs_root/first_fs install
构建最小根文件系统
在/dev下静态创建设备文件
查看设备号
ls -l /dev/console /dev/null
在工作目录下创建字符设备点
sudo mkdir dev && cd dev
mknod console c 5 1
mknod null c 1 3
init->busybox
构建 /etc/inittab
mkdir etc
echo \'console::askfirst:-/bin/sh\' \> etc/inittab
安装glibc 库
这也是前面动态编译Busybox时所需要的运行库
mkdir lib
把交叉编译工具里的运行库依赖文件都复制到最小根文件系统的lib目录下
cp命令的-d选项代表保持链接,这样不会就拷贝链接源
最小根文件系统
制作文件系统镜像
制作基于nandflash的yaffs2文件系统
解压 yaffs_source_util_larger_small_page_nand.tar.bz2
查看一下文件列表
编译make,得到二进制文件
复制到/usr/local/bin并加上可执行权限
为first_fs整个目录创建yaffs2文件系统镜像
然后通过DNW协议烧写到开发板
结果
报储存有坏块
根据报错"无法打开初始化的console"
重新回去看,发现设备没建立在/dev挂载点,补充后建立镜像烧写,启动得到结果
NFS
PC和开发板配置同一网段,如果是双机互联则需放行防火墙规则
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024,vers=3 192.168.123.74:/home/yu/myCode/devices/out /mnt