本人学习的是华清远见的一款FS4412学习板,学到内核移植,就把内核移植的学习笔记贴上来,跟大家学习交流交流。
具体步骤如下:
1,linux官网下载好linux-4.14.123.tar.gz (最好提前下载,下载速度超级慢)
https://www.kernel.org/
2,解压:
linux@linux:~/mykernel$ tar -xvf linux-4.14.123.tar.xz
3,进入linux-4.14.123目录:
不修改Makefile 直接执行 : make ARCH=arm exynos_defconfig 将exynos_defconfig配置文件导入
注:采用Exynos4412芯片,即加载exynos_defconfig配置
linux@linux:~/mykernel/linux-4.14.123$ make ARCH=arm exynos_defconfig
4,图形界面配置: make ARCH=arm menuconfig
linux@linux:~/mykernel/linux-4.14.123$ make ARCH=arm menuconfig
配置:
System Type —>
[*] Samsung EXYNOS —>
5,make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 编译将会生成zImage 内核映像压缩文件
linux@linux:~/mykernel/linux-4.14.123$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
6,进入目录 linux-4.14.123/arch/arm/boot 执行命令将zImage制作成 uImage
linux@linux:~/mykernel/linux-4.14.123/arch/arm/boot$ mkimage -A arm -O linux -T kernel -C none -a 0x41000000 -e 0x41000040 -n "aaa" -d zImage uImage
详细指定内核地址的方式可查看 :https://blog.youkuaiyun.com/qq_21792169/article/details/50166557
7,使用 linux-4.14.123/arch/arm/boot/uImage 和linux-4.14.123/arch/arm/boot/dts/exynos4412-origen.dtb
至此没有异常的话可以正常启动 linux,但是挂载不了根文件系统,因为没有配置网卡驱动
8,vi arch/arm/boot/dts/exynos4412-oringen.db,在 regulators前添加下面代码
linux@linux:~/mykernel/linux-4.14.123$ vi drivers/clk/clk.c
添加设备树节点
srom-cs1@5000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x5000000 0x1000000>; //对应芯片手册 3 Memory Map 的0x0500_0000 和 16 MB
ranges;
ethernet@5000000 {
compatible = "davicom,dm9000"; //内核通过该名字来匹配驱动
reg = <0x5000000 0x2 0x5000004 0x2>; //寄存器地址和数据宽度
interrupt-parent = <&gpx0>;//继承于 中断控制器gpx0
interrupts = <6 4>; //对应中断源 DM9000_IRQ -> XEINT6 。4对应 active high level-sensitive
davicom,no-eeprom;
mac-address = [00 0a 2d a6 55 a2];
};
};
9,驱动选配
linux@linux:~/mykernel/linux-4.14.123$ make ARCH=arm menuconfig
make ARCH=armmenuconfig
配置网络协议支持TCP / IP
[ * ]Networking support —>
Networking options —>
< * > Packet socket
< * >Unix domain sockets
[ * ] TCP/IP networking
[ * ] IP: kernel level autoconfiguration
配置dm900支持的网卡驱动:
Device Drivers —>
[ * ] Network device support —>
[ * ] Ethernet driver support (NEW) —>
<*> DM9000 support
配置支持的NSF服务:
File systems —>
[ * ] Network File Systems (NEW) —>
< * > NFS client support
[ * ] NFS client support for NFS version 2
[ * ] NFS client support for NFS version 3
[ * ] NFS client support for the NFSv3 ACL protocol extension
[ * ] Root file system on NFS
10,修改文件driver/clk/clk.c static bool clk_ignore_unused;改为static bool clk_ignore_unused = true; 具体原因不清楚,必须要配置。
linux@linux:~/mykernel/linux-4.14.123$ vi drivers/clk/clk.c
11,再次编译内核,执行步骤5,6,然后将内核,设备树拷贝到/tftboot下,可完成启动并挂载根文件系统。