从零适配IMX6ULL开发板Linux系统——uboot移植

串口驱动搜 CP210 下载

目的:当拿到一块儿完全没有系统的开发板,厂家并没有提供给我们对应的Linux系统,从芯片厂家提供的原厂资料中,修改并适配自己的开发板。

我们需要做的步骤如下:

  1. 获取资料
  2. 分析配套的SOC启动流程
  3. 对比与芯片原厂公板硬件的区别
  4. 尝试烧写公板系统并启动
  5. 自行编译出镜像并烧写启动

开发板:百问网IMX6ULL

一、前期能找到越多的资料越好

由于我使用的NXP公司的IMX6ULL,所以需要先去NXP官网注册一个账号,尽可能多的找IMX6ULL的相关资料。

NXP官网搜索IMX6ULL

 这个文档中描述的是SOC默认的Linux开发文档,提供编译烧写移植等参考说明。

 这两个文档是IMX6ULL处理器的开发手册。

芯片的相关资料就可以主要参考上面下载的文档,但是为了方便起见,我们最应该参考的是NXP提供的公板的资料,NXP官方公板,NXP官网已经根据自己的芯片对Linux进行了移植,因此,我们没有必要从Linux的源代码进行移植,毕竟只有芯片原厂最了解自己的芯片。

 NXP官网提供了快速开发手册,得到公板使用SD卡烧写系统镜像,设置SD卡启动方式,使用串口输出。

官网提供的对应版本uboot kernel源码和配置文件的文档

 官方提供的公板硬件原理图,用于 与自己的开发板对比,找出差异。

官方提供适用于公板的Linux内核文件

 尽最大可能找到相关资料,便于我们移植,

二、对比公板与自己使用开发板的区别

三、尝试着使用公板系统去启动开发板

 找到刚下载公板的系统文件L5.4.47-2.2.0_images_MX6UL7D.zip,并解压。打开文件夹你会发现提供了很多且很全的资料。

内核以及对应的设备树均有提供到!

如果我们要烧写整个系统的话,需要找到其中的imx-image-multimedia-imx6ul7d.wic文件

这个文件竟然1.27GB。。 

将这个文件保存到SD卡中,利用SD卡启动比较方便

在ubuntu中插入SD卡,利用命令

sudo dd if=./imx-image-multimedia-imx6ul7d.wic of=/dev/sdb bs=1M

进行烧写,

将开发板的启动模式设置为SD卡启动后插入SD卡。 

烧写后,可能根据开发板的不同会出现各种各样的问题,我的开发板烧写之后,就会无限重启,但是有些开发板是可以直接启动的

 如果该方法行不通的话,不要慌张,我们就一步一步来,至少先移植一个可以启动的uboot再说。

可以直接使用git下载uboot,在官方文档中也有写git仓库地址,不过我们需要去替换我们需要的uboot的版本。

git clone https://source.codeaurora.org/external/imx/uboot-imx

 git下载有一个问题,就是下载速度超级慢,是真的很慢,几百M的文件下载速度10KB+,emmm只能慢慢的等待。

等下载完之后,就有一个问题了,我们需要编译uboot,因此,编译uboot就需要设置我们的工具链了,我们还需要去下载一个交叉工具链

可以去下面的网站直接下载大牛们配置好的交叉工具链,下载后直接用就可以了

Cross-compilation toolchains for Linux - Home

直接下载就可以,下载完之后,放到ubuntu中,解压,记得设置环境变量

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/imx6ull_test/023_trans/armv7-eabihf--glibc--stable-2020.08-1/bin

到这一步,我们的交叉编译工具链已经设置好了,剩下的就是去编译出我们的uboot。

但是,我们不能直接去编译,我们需要根据我们使用的内核调整uboot的版本,找到与kernel内核最接近的版本号。

git branch -a
git checkout remotes/origin/imx_v2020.04_5.4.47_2.2.0

第一个命令是查看uboot的版本,在其中找到与我们内核版本最接近的版本号,就是上面的这个
找到后执行第二个命令,就会切换到对应的uboot版本。

然后进入到uboot的目录中

make mx6ull_14x14_evk_defconfig
make menuconfig
make

使用默认配置后,去掉网卡的驱动,最后make

去掉网卡驱动的原因是,对于上面的硬件会发现,我们的网卡与公板是有区别的,而且在刚才使用imx-image-multimedia-imx6ul7d.wic启动的时候,网卡也是在报错,我们直接把关于网卡的东西全部去掉,并不会影响我们的启动。

最后,会编译出来一个u-boot-imx6ull14x14evk_sd.imx文件,我们通过命令烧写到SD卡中,并设置开发板从SD卡启动,使用下面的命令烧写,注意与上面烧写系统的命令有区别。

sudo dd if=./u-boot-imx6ull14x14evk_sd.imx of=/dev/sdb bs=1k seek=1 conv=fsync

上面的命令是把uboot烧写到1k的位置处,下载的文档中有说明,这个是芯片自己的设置,需要把uboot烧写到1k位置处才行。

之后SD卡插到开发板上启动

 我的开发板是可以启动的,相信大家的都是可以的,但是可能有些开发板并不能启动到文件系统中,但是只要能显示出

starting kernel ...

说明uboot的任务已经完成了,uboot的移植就算成功了,也不能算是移植,至少有一个从零开发的感觉。


版权声明:本文为qq_41971227原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。