内核移植步骤
相比于uboot移植,内核只关心内存条的情况,所以移植相对uboot简单
**第一步:**网上下载相关的内核文件http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/
**第二步:**配置内核移植的必要环境
(1)需要支持menuconfig(有了这个方便我们后面选择配置)
只需要dpkg -i 压缩包就可以
(2)需要支持mkimage(编译image文件时需要)
将mkimage工具拷贝到/usr/bin**第三步:**选择默认配置
(1)进入解压后的文件夹找到Makefile文件,修改配置
ARCH ?= $(SUBARCH)
将这条配置命令修改为
ARCH ?= arm
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
将这条配置命令修改为
CROSS_COMPILE ?= arm-linux-
修改原因:第一条是指定(cpu架构),第二天是指定交叉编译器,如果不修改那么我们在执行命令的时候需要输入完整的指令:
powershell make ARCH=arm CROSS_COMPILE=arm-linux- uImage
**第四步:**添加新配置 (1)执行默认配置make exynos_defconfig
(2)执行make menuconfig
出现的界面就是我们需要选配的界面,例:
如果我们需要配置网卡驱动,实现NFS服务,我们需要勾选一下选项:
[*] Networking support --->
Networking options --->
<*> Packet socket
<*>Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
Device Drivers --->
[*] Network device support --->
[*] Ethernet driver support (NEW) --->
<*> DM9000 support
File systems --->
[*] Network File Systems (NEW) --->
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] Root file system on NFS
选择按键为shift+s
按照上面的配置修改完毕,NFS显示还是无法正常运行,原因在于我们只是设置了网卡和NFS服务器的配置,并没有告诉板子应该如何加载网卡,所以我们还需要完成修改设备树的操作:
$ vim arch/arm/boot/dts/exynos4412-fs4412.dts 添加如下内容:(难点)
选择在该文件中添加的原因是在dts文件夹中有很多的.dts文件都可以生成设备树,需要找到相对应的型号。
srom-cs1@5000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x5000000 0x1000000>;
ranges;
ethernet@5000000 {
compatible = "davicom,dm9000";
reg = <0x5000000 0x2 0x5000004 0x2>;
interrupt-parent = <&gpx0>;
interrupts = <6 4>;
davicom,no-eeprom;
mac-address = [00 0a 2d a6 55 a2];
};
};
这段配置需要我们自行通过看设计图来完成,部分参数说明:
reg:为网卡的起始地址
interrupt-parent:设置为中断管脚
interrupts:参数为gpx0_6,下降沿触发
mac-address:为网卡的物理地址
到这来为止内核移植算是基本完成,最后再进行编译即可:
make uImage
最后编译设备树:make dtbs
,再找到和自己板子相关的设备树文件即可
以上的操作系统可以实现网络功能,那么如果我们需要安装其他的驱动,需要安装步骤,先通过make menuconfig选择配置然后再在设备树文件上面加上相应地代码即可。
问题追加:
编译最后出现该问题:
解决方法:
未指定加载地址,所以需要使用以下语句执行:
LOADADDR=0x40008000 make uImage (LOADDR地址必须未未使用的地址)