系统移植3:kernel的配置,编译和移植以及根文件系统

本文详细介绍了Linux内核移植的过程,包括检查芯片支持、修改Makefile、配置内核、编译uImage和设备树文件。在移植过程中,遇到的错误如架构不匹配、缺失库文件及编译问题等都得到了解决。此外,还提到了网络配置、自动IP配置、NFS网络文件系统挂载的步骤。最后,讨论了根文件系统制作的基本流程和关键步骤。
摘要由CSDN通过智能技术生成

        linux kernel源码目录分析Kbuild,Kernel Build,管理内核编译的文件Makefile,kernel工程的Makefile。arch体系架构,arch目录下的子目录存放的是不同种类的架构block,块设备,一般是存储设备,存放的块设备管理的相关代码crypto,加密相关,存放加密算法实现代码Documentation说明文档,drivers设备驱动模块,存放各种设备类型驱动模块firmware,固件fs,文件系统,子目录存放各种文件系统include,头文件,子目录存放通用的各种模块的头文件init,kernel启动时初始化的代码ipc,进程间通信机制的代码kernel,kernel本身的代码lib,通用的库函数mm,内存管理net,网络协议栈,子目录存放各种网络协议scripts,辅助对kernel进行配置编译的脚本security,kernel安全机制相关的代码 。sound音频相关的代码tools,工具相关usr,kernel启动相关   virt,虚拟机相关。

1.看内核是否支持芯片

我们需要去arch/arm/configs目录下查看内核是否支持我们的芯片(exynos4412),找到之后我们需要对我们需要编译的芯片进行配置生成配置文件,这样编译的时候才知道我们需要对哪一个芯片进行编译

make exynos4412_defconfig

但是会发现执行的时候会出现问题:

 因为在makefile中默认是在x86架构下,所以我们需要进入makefile文件进行修改:

 

2.配置内核

我们可以进入配置工具图形界面配置一些内容更加方便

make menuconfig

但是我们会发现会报错

 原因是我们没有安装libncurses包:执行下述命令进行安装:

sudo apt-get install libncurses5-dev

3.编译uImage内核

make uImage -j8

现在我们可以对芯片进行编译了,但是最后却发生了一些错误导致编译失败:

需要安装依赖包 sudo apt-get install uboot-mkimage

提示”现在没有可用的软件包 uboot-mkimage,但是它被其它的软件包引用了,这可能意味着这个缺失的软件包可能已被废弃,按照其提示,安装”u-boot-tools“即可 sudo apt-get install u-boot-tools

 

 

 随后我们再进行编译,即可得到uImage文件

 4.编译设备树文件 make dts

每一个设备树文件都对应一个型号的开发板
(1)在主目录下,执行 make dtbs---会编译所有的设备树文件
(2)所以我们需要查找对应的设备树(找不到去找厂家,或者去新版uboot去找,实在不行就找芯片相同板子的设备树拷贝修改成我们自己的)
(3)修改 dts/Makefile ---增加我们的设备树文件
(4)编译 make dtbs

注意:内核的移植主要是在功能的增加和减少,以及内核的大小上体现

在arch/arm/boot/dts下将原本的相同的设备树文件复制并改名为我们的设备名,随后去makefile文件中将我们的新增的设备树添加到对应位置,然后就可以进行编译得到dtb设备树文件了(因为之前配置了对应的芯片所以只会编译对应芯片的设备树文件)

问题:

在完成上述移植后,我们我们在执行ifconfig eth0 ip 配置网络时发现找不到这个设备,这说明我们复制的那个设备树文件没有网卡这个设备,可能是我们参考的那个板子本身就缺少网卡设备所以我们需要去找相同网卡设备的设备树文件里将网卡设备的代码参考过来我们使用的网卡设备dm9000 可以使用下面这个查找指令进行查找

(指令find ./  | grep -IR dm9000)


找到对应的代码后将他复制并修改它的起始地址和对应的中断管脚(找芯片手册)适应我们的硬件适配。在完成上述操作后发现还是找不到网卡设备,可能是因为没有添加设备的驱动,那么我们可以总结一下,如果我们需要添加一个硬件设备的话,那么我们需要添加两个东西:设备树文件和相应的驱动配置

1.设备树文件
2.在内核中配置网卡驱动
    make menuconfig--->/dm9000
    找到路径
    选中网卡驱动,保存,退出
    重新编译uImage

烧写之后我们就可以找到网卡设备了

5.自动配置ip功能

make menuconfig

进入menuconfig配置界面
 Network support-->network options--->IP:kernel ...............

将ip放到启动参数bootargs中,那么启动的时候就会自动将ip给内核进行自动配置

6.增加网络文件系统nfs

nfs主要用于实现网络文件的挂载,实际上是实现网络文件的共享,在开发的过程中,通常在系统移植的最后一步会制作文件系统,那么这是可以把制作好的文件系统放置在我们开发主机PC的相应位置,开发板通过nfs服务进行挂载,从而测试我们制作的文件系统是否正确,在整个过程中并不需要把文件系统烧录到Flash中去,而且挂载是自动进行挂载的,bootload启动后,kernel运行起来后会根据我们设置的启动参数进行自动挂载,因此,对于开发测试来讲,这种方式非常的方便,能够提高开发效率。

1.服务端:一般部署在高性能主机(ubuntu)

安装nfs
sudo apt-get install nfs-kernel-server
将根文件系统解压到用户目录下

修改nfs的配置  vi  /etc/exports,将rootfs目录共享,添加到最后

重启nfs
sudo /etc/init.d/nfs-kernel-server restart

2.客户端
menuconfig配置界面
搜索nfs找到路径nfs client进行配置

make uImage 重新编译内核

3.修改启动参数
bootargs root=/dev/nfs nfsroot=192.168.3.11:/home/hqyj/myfile/rootfs,v3 rw console
=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.3.16

4.加载命令
不需要下载根文件系统了 
bootm 内核 - 设备树

根文件系统的制作

根文件系统是存放运行,维护系统所必须的各种工具软件,库文件,脚本,配置文件和其他特殊文件的地方,也可以安装各种软件包

首先我们来看看根文件主要包含了哪些目录

 程序文件目录:

 配置基本的Linux命令,需要用到我们的busybox来制作:

1.busybox解压
2.make menuconfig进行配置:静态库 和交叉编译环境

3.编译make

4.安装 make install----->bin linuxrc sbin user

                                          5. 补齐目录:mkdir lib etc dev proc sys mnt opt tmp var

                                           

                                        6、填充内容:

1)lib --》cp gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/*      _install/lib/    -af

2)etc --》fstab init.d/rcS inittab profile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值