前言
本文档记录一下学习正点原子阿尔法开发板的学习过程中的uboot移植过程,一是为了加深印象,二十为了提取关键信息方便后续查看,三是记录自学过程中遇到的问题及注意点,避免再次踩坑。
一、编译NXP官方uboot
先将NXP的官方uboot放到ubuntu的自定义文件夹中,或者也可以从NXP官网下载其维护的buoot,先编译一遍。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig /* 配置:其实就相当于使能一些宏定义,这些宏定义被使能以后,会开启某一些功能 */
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8 /* 这个j8你可以根据自己的电脑配置去修改 */
当然,上述命令太长了,我们在这里可以对NXP的uboot做出第一步修改。打开顶层Makefile文件,找到下面的的代码段,修改ARCH和CROSS_COMPILE两个变量的值。
上述编译的目的有三个:
1、编译NXP的uboot烧写测试一下,方便大家有个直观印象,知道大概需要修改的内容涉及什么外设,如果只看视频照着做很容易失去自己的思考,导致视频结束就全部忘了:这里发现LCD和网口驱动有问题,不能使用;
2、修改顶层Makefile的ARCH和CROSS_COMPILE的变量值,方便编译的时候不用输入一长串的命令,当然这不是必须的;
3、前面教程已经让我们熟悉了alientek的uboot的使用,这一步咱们不看视频,只看pdf或者啥也不看,知己敲一下命令,这样能够加深对编译的命令步骤的熟悉,不至于过两天又忘记咋操作了。
二、在uboot中添加自己的开发板
这一步就正式开始移植uboot了,这里的顺序和正点原子的不一样,主要是方便记忆和理解。
1、添加开发板对应的头文件
cd include/configs/ /* 进入此目录 */
cp mx6ullevk.h mx6ull_alientek_emmc.h
/* 拷贝完以后将下面的语句修改 */
#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H
/* 修改成下面的 */
#ifndef __MX6ULL_ALIENTEK_EMMC_CONFIG_H
#define __MX6ULL_ALIENTEK_EMMC_CONFIG_H
/* 这个做过STM32或者51单片机的应该都理解,如果没有定义这个宏,则define一个宏 */
在include/configs目录下放着各个开发板的头文件,在这里使用的是NXP的mx6ullevk.h,重命名为自己的头文件,只需要修改一下宏就可以了,其他的不需要修改,但是建议还是根据正点原子的pdf文档过一遍这个头文件,虽然看着又长又臭,但实际上坚持一下看完,其实也不难。
2、添加开发板对应的板级文件夹
学习过单片机的都知道,一般我们写某个外设驱动都会建一个xxx.h和一个xxx.c文件,其中头文件用来放一些宏定义、函数声明之类的,具体的驱动实现则放在.c文件里。uboot也是一样,上面我们定义了头文件,那肯定得有.c文件,只不过不是放在一个文件夹而已。
cd board/freescale/
cp mx6ullevk/ -r mx6ull_alientek_emmc
cd mx6ull_alientek_emmc
mv mx6ullevk.c mx6ull_alientek_emmc.c
看到这里大家应该还有印象,上面第一步修改的头文件是mx6ullevk.h,那么这一步肯定是修改mx6ullevk.c啦。
这一步复制的文件夹你可以随便命名gin,但是里面的.c文件则最好跟上面的.h文件同名。
2.1 、修改 mx6ull_alientek_emmc 目录下的 Makefile
重点是第 6 行的 obj-y,改为 mx6ull_alientek_emmc.o,这样才会编译 mx6ull_alientek_emmc.c这个文件。
2.2 、修改 mx6ull_alientek_emmc 目录下的 imximage.cfg 文件
这个路径其实就是咱们刚刚复制出来的文件夹,所以上面的修改一定要对应文件夹名字,而不是对应.c文件的名字!
2.3 、修改 mx6ull_alientek_emmc 目录下的 Kconfig 文件
一共四处修改,这里要记住第一处的TARGET_MX6ULL_ALIENTEK_EMMC,等会会用到。这个文件其实是用来给图形配置使用的,记住。
2.4 、修改 mx6ull_alientek_emmc 目录下的 MAINTAINERS 文件
这里可以看到,第4行其实是刚才创建的文件夹路径,第5行是刚才创建的头文件,至于第6行其实是配置文件,咱还没创建,这里也可以随便写个名字先,等下再回过头来看。
3、添加开发板默认配置文件
先在 configs 目录下创建默认配置文件,复制 mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_alientek_emmc_defconfig,命令如下:
cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_alientek_emmc_defconfig
这里注意了,上面复制出来的这个文件就是默认配置文件,这个名字要和2.4中所说的名字一样。
上面的第一行,不就是咱再第2步创建的文件夹的路径吗?
第4行,就是上面2.3提示要记住的名字,其实就是在这里使能TARGET_MX6ULL_ALIENTEK_EMMC这个宏,这样2.3里的内容才会出现在图形配置界面。
4、修改 U-Boot 图形界面配置文件
uboot 是支持图形界面配置,关于 uboot 的图形界面配置下一章会详细的讲解。修改文件arch/arm/cpu/armv7/mx6/Kconfig
这个是为了将TARGET_MX6ULL_ALIENTEK_EMMC选项配置到图形化界面中去,是和第3步以及2.3关联在一起的
这个是为路径就是咱们刚才第二步里创建的文件夹,这句话的意思就是调用这个路径下的Kconfig文件。
5、编译测试一下
到这里基本的移植就做好了(除了LCD和网口驱动),所以先做个测试。按第一步的编译命令执行一遍。
如果只是单纯地看视频来移植,或者单纯地看pdf移植,我相信一旦过去关了视频和Pdf立刻就忘记了。有一些修改我们可以不知道为什么要改,毕竟是初学者嘛,但是怎么改肯定要知道的,比如我上面列出的几处修改的文件或者文件夹,其命名是互相关联的,我们可以改成任意的名字,但是关联在一起的必须是相同的名字,否则就会出错。