300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 嵌入式Linux内核以及根文件系统制作

嵌入式Linux内核以及根文件系统制作

时间:2023-12-02 19:15:58

相关推荐

嵌入式Linux内核以及根文件系统制作

内核制作

注意:

我测试的使用nandflsh中bootloader启动,sd卡bootloader启动有问题

制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致。

清除原有配置与中间文件

x86: make distclean

arm:make distclean

配置内核

x86: make menuconfig

arm:make menuconfig ARCH=arm

(一般来说有一个参考的配置文件)

编译内核

x86: make bzImage

arm:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

(注意使用ARCH以及CROSS_COMPILE参数)

通过tftp传到内存中

(注意将uImage.bin移动到tftp服务器指定问文件夹内)

tftp 0xc0008000 uImage.bin

然后启动bootm c0008000

可以看到没有文件系统,内核无法进行挂载

根文件系统制作

建立根文件系统目录与文件 创建目录创建设备文件加入配置文件添加内核模块编译busybox 挂载文件系统到内核 挂载方式简介initramfs挂载NFS挂载

创建目录

mkdir bin dev etc lib proc sbin sys usr mnt tmp var

mkdir usr/bin usr/lib usr/sbin lib/modules

创建设备文件

cd rootfs/dev

mknod -m 666 console c 5 1

mknod -m 666 null c 1 3

(-m 属性、c表示字符设备、 5 主设备号、 1次设备号)

加入配置文件

tar xvf etc.tar.gz

mv etc/* ./root/etc/ -rf

添加内核模块

cd ../linux(linux是上面我们制作内核的文件)

make modules ARCH=arm CROSS_COMPILE=arm-linux-

make modules_install ARCH=arm INSTALL_MOD_PATH=../rootfs

编译/安装busybox

Busybox:嵌入式开发中的瑞士军刀

配置busybox

make menuconfig

Busybox Settings **>**build Options->

选中“Build busybox as a static binary”,静态链接Cross Compiler 'prefix (arm-linux-)

Installation Options- >

选中“Don’t use /usr",选中该项可以避免busybox被安装到宿主系统的

/usr目录下,破坏宿主系统

Busybox Installation Prefix (/xxx/rootfs)

该选项表明编译后的busybox的安装位置

之后使用make开始编译

编译完成

安装make install

挂载根文件系统到内核

挂载方式

根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM和FLASH,常用的基于存储设备的文件系统类型包括: jffs2 , yaffs2 , ubifs,ramdisk等

基于NandFlash的文件系统 Yaffs2(可读可写)UbiFS(可读可写) 基于NorFlash的文件系统 Jffs2(可读可写) 基于内存的文件系统(启动速度快) Ramdisk(固定)Initramfs(动态分配) 基于网络的文件系统 NFS(一般开发阶段使用)

使用Initramfs

cd rootfs

ln -s ./bin/busybox init配置Linux内核,支持initramfs

然后到内核文件所在目录输入make menuconfig ARCH=arm

然后选择其下面一项指定位置

最后保存退出,重新编译

make uImage ARCH=arm CROSS_COMPILE=arm-linux-

这个时候编译的内核是有文件系统在其中的

复制到tftp目录中去

然后再U-Boot中设置环境变量

set bootargs noinitrd console=ttySAC0,115200

然后再U-Boot中通过tftp下载

tftp c0008000 uImage.bin

然后启动

bootm c0008000

可以看到系统被成功启动

使用NFS(network file system)

首先取消initramfs,在内核文件目录

make menuconfig ARCH=arm

然后勾选network file system

保存后再次编译

然后将rootfs这个文件夹通过nfs共享出去

然后在bootloader中下载uImage.bin

开发板中

tftp c0008000 uImage.bin

然后要设置启动参数

set env bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.3.246:/home/wp/Desktop/arm-kernel/rootfs ip=192.168.3.122:192.168.3.246:192.168.3.1:255.255.255.0:willpower:eth0:off

其中:

nfsroot表示共享的rootfs文件夹的位置

ip字段后面依次为开发板IP、nfs服务器IP、网关IP、子网掩码、主机名字、网卡、以及DHCP是否开启

这个时候可能会出现

Linux通过nfs挂载根文件系统失败:VFS: Unable to mount root fs via NFS, trying floppy.

参考此篇文章(有效)

sudo vim /etc/default/nfs-kernel-server

添加

RPCNFSDOPTS="–nfs-version 2,3,4 --debug --syslog"

然后重启服务器

sudo /etc/init.d/nfs-kernel-server restart即可

然后再开发板中启动内核

bootm c0008000

就可以成功看到界面了

这个时候在一边做操作即可同步到另一边非常方便

编译问题

编译内核提示mkimage command not found – U-Boot images will not be built

sudo apt install u-boot-tools

“Makefile:xxx:***混合的隐含和普通规则。停止”

原文链接

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。