构造嵌入式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

posted @ 2021-01-15 13:36  蓝天上的云℡  阅读(1288)  评论(0编辑  收藏  举报