从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)

嵌入式根文件系统一般都是使用busybox

1.下载

https://busybox.net/

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第1张图片

我没安装git工具,我就直接下载源码了

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第2张图片

我们就下载一个19.2的版本

放入linux系统中某个目录,解压

需改顶层Makefile

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第3张图片

nfs服务器搭建,参考我的这篇文章

https://blog.csdn.net/qq_16777851/article/details/81516978

 

make menuconfig

选择配置

1.指定安装路径

Settings  --->  
    --- Installation Options ("make install" behavior) 
    (/home/run/work/rootfs/) Destination path for 'make install'  

2.去掉简要安装,我们调试驱动需要详细的

Linux Module Utilities  --->   
    [ ] Simplified modutils                                                         
    [*] depmod (26 kb)                                                             
    [*] insmod (22 kb)                                                             
    [*] lsmod (4.3 kb)                                                                               
    [*]   Pretty output (NEW)                                                                             
    [*] modinfo (25 kb)                                                             
    [*] modprobe (29 kb)                                                          
    [*]   Blacklist support (NEW)                                                     
    [*] rmmod (3.6 kb)        

3.静态库编译busybox

 Settings  ---> 
    [*] Build static binary (no shared libs)

4.设置,命令行风格和网络配置

 Settings  ---> 
    --- Library Tuning   
        [*] Support /etc/networks     
        [*]   vi-style line editing commands   

5.mdev配置

Linux System Utilities  --->     
     [*] mdev (16 kb)                                                               
     [*]   Support /etc/mdev.conf                                                   
     [*]     Support subdirs/symlinks                                              
     [*]       Support regular expressions substitutions when renaming device        
     [*]     Support command execution at device addition/removal                    
     [*]   Support loading of firmware 

上面的好多都是选中的,这里只是确认一下,宁可多选,不要少选。

编译

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第4张图片

出现了一系列错误,找不到头文件

后来换了一个编译器就可以了

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第5张图片

红框框起来的就是she生成的可执行文件

make install

会安装到我们前面指定的文件夹中

可以看到已经有了

 

把该目录导出到nfs服务器的目录下

打开,添加,重启nfs服务器

 sudo vi /etc/exports
/home/run/work/rootfs *(rw,sync,no_root_squash,no_subtree_check)
sudo /etc/init.d/nfs-kernel-server restart

这个是我重新搭建的一个虚拟机上做了所以ip地址有了小改变

其中从机地址是192.168.0.103,nfs文件系统目录和上面添加的一致就可以。

bootargs=root=/dev/nfs nfsroot=192.168.0.103:/home/run/work/rootfs \
ip=192.168.0.20:192.168.0.103:192.168.0.1:255.255.255.0::eth0:off \
init=/linuxrc console=ttySAC2,115200

 

tfttp下载uImage ,bootm启动

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第6张图片

发现已经可以启动了,命令行也能敲,就是不听的打印open /dev/tty信息,主要是我们还没增加rcS文件

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第7张图片

 

1.在rootfs中添加常用的目录

mkdir dev mnt proc var tmp sys root lib

2.拷贝动态链接库

从你的交叉编译工具链的lib目录下

先通过find命令找到.so文件的目录

 cp /usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/libc/lib/ lib/ -a

lib文件的大小5.2M

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第8张图片

去掉库文件的符号信息

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第9张图片

 

如果构建最简单的文件系统可以直接拷贝,busybox的如下目录

examples/bootfloppy/etc

 

 

我为了今后开发方便就多添加一些内容

3.制作inittab文件

inittab的规则和作用在busybox/example/inittab文件里面有详细说明

#first:run the system script file
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

4.制作rcS文件

先创建文件夹

/rootfs/etc$ mkdir init.d

在init.d文件夹下创建rcS文件

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S
prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10

5.添加fstab

 vi etc/fstab
# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# 	 	 	 	 	 	
	proc 			/proc 			proc 	defaults 	0 		0
	sysfs 			/sys 			sysfs 	defaults 	0 		0
	tmpfs 			/var 			tmpfs 	defaults 	0 		0
	tmpfs 			/tmp 			tmpfs 	defaults 	0 		0
	tmpfs 			/dev 			tmpfs 	defaults 	0 		0

6.添加profile

# Ash profile
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH
`hostname run`
HOSTNAME=`hostname`

export USER LOGNAME PS1 PATH

 

ok,重新启动linux

 

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第10张图片

ok已经可以运行了,唯一就是rcS我们在linux系统下是普通用户作的

添加管理员权限给这个文件

顺便给其它文件也添加权限

 

重新启动,可看到,已经正常启动,无论是hosrname,还是网卡ip都ok

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第11张图片

同时查看sysfs文件系统和proc文件系统

 

 

遇到的问题nfs启动时已经传过来了本机ip地址,所以rcS文件不再需要设置本机地址,否则会出现下面的情况

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第12张图片

 

在非nfs启动时可以加上,用来设置默认ip,我这里因为要nfs启动就注释掉了

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S
prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

/bin/hostname -F /etc/sysconfig/HOSTNAME

#ifconfig eth0 192.168.1.10

查看sysfs文件系统和proc文件系统。如果有内容,就可以确信网络根文件系统制作好了。

从零开始之文件系统制作、根文件系统制作(一、根文件系统制作)_第13张图片

 

已经有内容的网络文件系统好了,制作各种格式的镜像格式就不再说了,大家可以百度,很多博客都有说的。

你可能感兴趣的:(从零开始系列,从零开始学linux驱动)