关系链
-
uboot的目的是启动内核
-
内核的目的是启动应用程序
-
应用程序的位置,在根文件系统中
什么是根文件系统
-
类似于win下的CDE盘,Linux将存储设备分为几个分区,不同分区存放不同类别的文件;
-
然而,Linux中有些 必要的、基本的文件,它们合称为【根文件系统】
-
比如内核映像文件、第一个程序init,shell,依赖的库等
-
文件类型:
用busybox制作根文件系统
什么的busybox?
-
所谓【制作根文件系统】,其实就是【创建各种目录及文件】
-
Busybox就是这样的工具
-
步骤
步骤一、解压busybox源码
tar xjf busybox-1.7.0.tar.bz2
步骤二、配置busybox
cd busybox-1.7.0
make menuconfig
参考【嵌入式linux应用开发完全手册】中的17.2.3章节
-
配置交叉编译
-
tab
-
C库配置为使用动态库
-
使能mdev
-
。。。
make
步骤三、安装
【注意:这里不能直接make install,不然会直接安装到当前环境;破坏自己的Liunx环境】
需要新建一个目录,然后安装到该目录下
mkdir -p /kuan/first_fs
make CONFIG_PREFIX=/kuan/first_fs install
————此时,我们就得到了一个文件系统的大概雏形————
步骤四、添加dev目录
mkdir /kuan/first_fs/dev
cd /kuan/first_fs/dev
sudo mknod console c 5 1
sudo mknod null c 1 3
步骤五、添加etc目录
mkdir /kuan/first_fs/etc
vi etc/inittab
inittab中填入:
console::askfirst:-/bin/sh
步骤六、安装C库
打开你的gcc交叉工具的安装地址,然后复制so动态库文件到first_fs中去
交叉工具安装参考:
20210804 - JZ2440开发板新上手
cd [your arm-linux-gcc path]
mkdir /kuan/first_fs/lib
cp *.so* mkdir /kuan/first_fs/lib -d
步骤七(再完善)、挂载proc(虚拟文件系统)
mkdir /kuan/first_fs/proc
vi /kuan/first_fs/etc/inittab
添加一句:执行一个脚本文件
::sysinit:/etc/init.d/rcS
mkdir /kuan/first_fs/etc/init.d
vi /kuan/first_fs/etc/rcS
在rcS中加上:
mount -t proc none /proc
chomd +x /kuan/first_fs/etc/rcS
搞定!!
做好的跟文件系统如何烧录到板子上?
——需要做一个映像文件
如何制作yaffs文件系统映像文件?
步骤一、解压
tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2
步骤二、编译生成yaff2的工具——mkyaffs2image
cd Development_util_ok/yaffs2/yaffs2
make
sudo cp mkyaffs2image /usr/local/bin
sudo chmod +x /usr/local/bin/mkyaffs2image
步骤三、生成映像文件
cd /kuan
mkyaffs2image first_fs first_fs.yaffs2
ok!得到 first_fs.yaffs2映像文件。
步骤四、烧写到板子
略。
内核怎么启动第一个应用程序?
1,打开设备
-
open(/dev/console)——创建控制台设备文件,设备描述符为0(stdin)
-
sys_dup(0) ——复制,设备描述符为1(stdout)
-
sys_dup(0) ——复制,设备描述符为2(stderr)
-
所有标准输入、输出、错误,其实是同一个文件。
2,run_init_process——创建线程
如果创建成功,是不会返回的
最小的根文件系统包含哪些?
-
dev/console dev/null
-
init 就是busybox
-
/etc/inittab
-
配置文件中指定的程序
-
C库