系统:Ubuntu 18.04.1 LTS amd64
Linux内核版本:3.5
编译工具链: arm-linux-gcc version 4.4.3
我们知道,Linux中上层应用是不能直接访问硬件的,应用访问硬件需要通过内核,因此我们的基本过程是在内核源码中添加GPIO驱动代码,该驱动代码实现上层应用可以通过调用内核中的函数对单个GPIO写,而流水灯的逻辑我们在上层的测试程序中实现。
一、 准备工作:
1、 GPIO端口选择和连线
本开发板为Tiny4412 1506,根据友善之臂提供的原理图,我们选择8个GPIO口作为LED控制端口。
如图所示,CON17在板子上是双排针接口,作为摄像头的一个接口,我们重点关注这些引脚和CPU的什么引脚连接起来,如下图所示:
刚好发现在CON17上,GPJ0_0-GPJ0_7都有,刚好8个端口,我们按照对应关系,将GPJ0_0-GPJ0_7从上到下依次和流水灯电路接好,如下图所示:
将两块线路板共地,因为在上面的51单片机板上流水灯是共阳的,所以我们还需要接入5V电源。至此,线路已经连接好。
2、 内核源码和必要文件准备
新建Src文件夹用来存放源码:
mkdir Src
将准备好的linux内核源码(友善的资料里有)放在该文件夹下:
解压:tar –xzvf linux-3.5-20170221.tgz
将友善提供的ramdisk镜像和文件系统镜像也一并放在该文件夹下:
二、 内核初次编译:
该过程是为了排除源码中存在的一些错误,通过之后后续过程只关注于流水灯驱动部分。
进入目录:
拷贝一份工程下针对tiny4412的config文件:
然后执行make menuconfig进行一些配置:
在menu里面关闭掉trustZone模式,因为我们当前的uboot不支持该模式。
之后打开内核的debug信息输出,这样做的好处是当内核启动不成功的时候我们可以知道卡在什么地方了,方便调试。
然后保存退出。
打开kernel文件夹下的timeconst.pl文件,将373行的源码修改为:
保存退出。
然后在顶层目录下进行编译:
make –j4
等待若干分钟后: