首先将在Ubuntu环境中,添加交叉编译工具到PATH变量,永久有效。
root@linux:~/linux-3.14-fs4412# vim /etc/bash.bashrc
export PATH=/home/linux/soft/gcc-4.6.4/bin:$PATH
/home/linux/soft/ 是工具链的路径,添加到PATH的头部;写入/etc/bash.bashrc 中保证重启机器后变量仍然有效。
1.下载最新版本的内核 到Ubuntu
https://www.kernel.org/
2.解压内核
tar -xvf linux-4.19.1.tar.xz
3.进入目录,在Makefile中指定交叉编译工具
root@linux:~/linux-3.14-fs4412# vim Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabi-
ARCH指定默认索引路径,CROSS_COMPILE 指定交叉编译工具的前缀
4.导入三星公司对该芯片的配置文件
make exynos_defconfig (arch/arm/configs/ 目录下,arch/arm/configs/exynos_defconfig)
ps:如果提示缺少库,使用apt-get install下载即可。也可以将错误信息在百度查询。
5.编译内核,生成压缩的内核镜像文件uImage
root@linux:~/linux-4.19.1# make uImage LOADADDR=0x40008000
或者
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- //编译将会生成 zImage
cd linux-4.19.1/arch/arm/boot //进入目录
执行命令将 zImage 制作成 uImage
mkimage -A arm -O linux -T kernel -C none -a 0x41000000 -e 0x41000040 -n "aaa" -d zImage uImage
6.编译设备树
root@linux:~/linux-4.19.1# make dtbs
7.将内核与设备树文件,放在 /tftpboot/(tftp服务根目录)下
root@linux:~/linux-4.19.1/arch/arm/boot # cp uImage /tftpboot/
root@linux:~/linux-4.19.1/arch/arm/boot # cp dts/exynos4412-origen.dtb /tftpboot/
通过串口配置U-Boot的启动参数,让U-Boot通过tftp服务获取uImage和 exynos4412-origen.dtb
配置如下
至此没有异常的话可以正常启动 linux, 但是挂载不了根文件系统,因为没有配置网卡驱动。
1.配置内核,menuconfig 驱动选配
make ARCH=arm menuconfig
[*] 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) --->
2.配置设备树,添加设备树节点
root@linux:~/linux-4.19.1# vim arch/arm/boot/dts/exynos4412-origen.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];
};
};
3.重新编译内核和设备树,并覆盖到tftp跟目录下
这样上电就能成功加载内核,挂载nfs文件系统了。
完毕。