200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【迅为iMX6Q】开发板:uboot-imx编译

【迅为iMX6Q】开发板:uboot-imx编译

时间:2022-12-25 08:37:09

相关推荐

【迅为iMX6Q】开发板:uboot-imx编译

嵌入式开发实践系列文章 - 目录/tcjy1000/article/details/123701482

平台

操作系统:win10 64位

虚拟机:VMware® Workstation 14 Pro

虚拟机操作系统:ubuntu 18.04 64位ubuntu-18.04.2-desktop-amd64.iso

开发板:迅为 iMX6Q

前言

最近一直想加强一下嵌入式Linux系统的开发,买了几本书,看了感觉效果不是很大,还是需要多与实践相结合。

之前搞过Atmel的ARM9+Linux,但现在Linux内核版本已经很高很新了,现在想搞个较新的,在网上找了找,选择了IMX6Q(四核,ARM Cortex-A9架构),除了跑Linux,还可以运行Android,可以让自己的了解更多。

买了开发板,要了开发板的资料,自己还是想一步步入手,一步步入门。

因此,还是从开发环境搭建开始研究。

搭建环境

(1)安装虚拟机,有免费的【Oracle VM VirtualBox】,还有付费(破解)的【VMware® Workstation】,这里选择VMware14。

(2)安装ubuntu18.04(较新)的Linux主机,用于嵌入式交叉编译环境的开发。

(3)下载IMX6Q的官方的代码。目前主要关注uboot,linux内核(目前NXP官方维护的)。

【imx内核源码】:

git clone /external/imx/linux-imx

【imx uboot】

git clone /external/imx/uboot-imx

现在大型的软件工程,git是一个不错的代码与版本管理工具。

(4)进入git clone下来的uboot目录,默认的分支应该是master,通过命令切换到自己想要的分支。

git branch -va(查看所有的本地与远程分支)

git checkout -bimx_v.03_4.14.98_2.0.0_ga origin/imx_v.03_4.14.98_2.0.0_ga(切到 linux 4.14.98 这个分支上)

git pull(同步一下分支)

(5)如果是新安装的ubuntu18.04系统,环境还需要配置一下,否则直接编译,连make命令都可能不识别。

这里我安装了uboot编译需要的软件包(可以不断的编译与尝试,ubuntu会提示安装):

sudo apt-get install gcc-arm-linux-gnueabi

sudo apt-get install git

sudo apt install make

sudo apt install gcc

sudo apt install bison

sudo apt install flex

sudo apt-get install libncurses5-dev

sudo apt-get install libssl-dev

sudo dpkg-reconfigure dash(这里选择【取消】,意思是选用sh,而不是dash)。

(6)编译uboot-imx

首先在uboot-imx根目录下:

ls configs

看一下开发板的板子配置文件,找一个与现有开发板(IMX6Q,这里Q应该是四核的四的意思)型号接近的。我这里先选择一个看看环境是否正常。

make imx6q_icore_nand_defconfig

make menuconfig(图形配置,如果不更改,可以直接点【save】保存,保存 .config,退出)

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-(ubuntu 直接apt安装的,可以用)

第一次编译,很可能会不成功,如果不成功,看一下错误原因。

我遇到的错误为:

LD u-boot

arch/arm/mach-imx/built-in.o: In function `arch_preboot_os':

/home/imx6/share/uboot-imx/arch/arm/mach-imx/cpu.c:354: undefined reference to `ldo_mode_set'

Makefile:1304: recipe for target 'u-boot' failed

查看了一下报错的文件,/home/imx6/share/uboot-imx/arch/arm/mach-imx/cpu.c,发现这个错误,是一个函数没有定义或是头文件没有包含进来,造成函数名不识别的问题。

我的解决是找到这个宏 【CONFIG_LDO_BYPASS_CHECK】 ,在配置文件里去掉这个宏定义即可。

通过查看.config文件,发现了:CONFIG_LDO_BYPASS_CHECK=y(有效),因此,可以make menuconfig配置。

void arch_preboot_os(void){#if defined(CONFIG_PCIE_IMX)imx_pcie_remove();#endif#if defined(CONFIG_SATA)sata_remove(0);#if defined(CONFIG_MX6)disable_sata_clock();#endif#endif#if defined(CONFIG_LDO_BYPASS_CHECK)ldo_mode_set(check_ldo_bypass());#endif#if defined(CONFIG_VIDEO_IPUV3)/* disable video before launching O/S */ipuv3_fb_shutdown();#endif#ifdef CONFIG_VIDEO_GIS/* Entry for GIS */mxc_disable_gis();#endif#if defined(CONFIG_VIDEO_MXS)lcdif_power_down();#endif#if defined(CONFIG_VIDEO_IMXDCSS)imx8m_fb_disable();#endif}

重新执行make menuconfig,去掉这个宏 【CONFIG_LDO_BYPASS_CHECK】相关的配置,

不勾选这个选项即可:【】Enable the LDO bypass checking and settting

再次编译uboot-imx通过。

小结

这样,uboot-imx正常的编译通过,和之前用过的ARM9处理器,编译方式大同小异。

但这仅仅是开始,还没有真正的了解这个IMX6Q的驱动与应用,还需要多看数据手册、原理图、教程文档、网络资源等。

更重要的是,重视每次的错误与失败,这都是成功的积累。

接下来,继续研究Linux内核的编译环境。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。