硬件环境

  • 开发板 FS4412(华清远见的板子,基于Cortex-A9的处理器)
  • PC机 Ubuntu系统 (Linux大家庭中一个发行版)
  • 网线 (速度较快,通过网络xieyi协议传输文)
  • 串口线(与开发板进行命令交互)

 

前提

  • 使用已经移植好的U-BOOT,在此基础上进行内核的移植
  • 保证开发板与虚拟机网络联通状态,虚拟机提供tftp,nfs服务
  • 在虚拟机中集成了指定的交叉编译工具,并添加到PATH变量中

 

首先将在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的启动参数,让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文件系统了。

 

完毕。