一、前言
首先按照官方给的流程,采用比较新的4.14.2内核来学习Linux驱动和arm编程。在学习前必须先搭建好学习的开发环境,迅为官方的itop-4412开发板默认烧写的是安卓系统,需要重新烧写自己编译的uboot和内核文件。内核文件使用官方提供的system.img即可,如果想要自己编译,可以选择busybox,笔者使用官方提供的\ iTOP-4412开发板系统源码及镜像(其他)\高版本busybox1.26.2移植资料\编译好的镜像\system.img
文件即可。
二、编译uboot
2.1 编译uboot时出错
在编译uboot时有下列错误提示:
dtc: invalid option -- 'i'
通过查询互联网上的资料,发现是device tree compiler的版本过低,通过apt安装的为1.3的版本。需要先卸载掉,然后手动通过deb离线包安装1.4的版本即可。下面给出官方离线包路径,点击后面安装包名下载。跳转链接 --> device-tree-compiler_1.4.0+dfsg-2_i386.deb
三、编译Linux内核
3.1 结果
以下结果说明编译内核成功。
...
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-4.14.2
Created: Wed Feb 27 08:28:44 2019
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5599808 Bytes = 5468.56 kB = 5.34 MB
Load Address: 40007000
Entry Point: 40007000
...
DTC arch/arm/boot/dts/exynos4412-itop-elite.dtb
...
四、烧写到tf卡
1、官方推荐方式
采用官方的mmc中的出厂uboot,提供的fastboot方式来对tf卡进行分区,然后写入最小文件系统system.img。
2、网络方式
也可以采用uboot提供的网络功能,用tftp下载内核和设备数文件,再通过nfs挂载根文件系统。此方法比较方便快捷,适合内核文件经常变更的场景,也可以适合根文件系统经常有变动的场景。
五、整理好的源码
1、说明
参考官方的uboot和Linux源码,为了学习和调试的方便,参考官方的手册,将内核配置成了nfs启动。需要根据手册,配置好NFS服务器和配置参数,根据自己的环境修改对应文件,然后编译好uboot和内核文件。最后通过uboot将内核烧写进去即可。
2、链接
下面放出依据itop官方源代码,稍加修改的uboot和Linux源码。
- Uboot: https://github.com/jason416/itop4412_uboot_official
- Linux: https://github.com/jason416/itop4412_linux_official
具体最小文件系统请查阅本专题其他文章,有详细教程说明,本文只是一个概览。
3、搭建好的环境汇总
参见我的另一篇文章搭建好的itop4412驱动学习环境汇总 - 可直接下载使用。有学习驱动的环境归总,可直接下载使用。