ubuntu18.04搭建【迅为iMX6Q】开发板嵌入式Linux开发编译环境01:uboot-imx编译

操作系统:win10 64位

虚拟机:VMware® Workstation 14 Pro

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

开发板:迅为 iMX6Q

本次目标:uboot-imx编译环境搭建

 

        最近一直想加强一下嵌入式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 https://source.codeaurora.org/external/imx/linux-imx

【imx uboot】

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

 

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

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

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

git checkout -b imx_v2018.03_4.14.98_2.0.0_ga  origin/imx_v2018.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
}

ubuntu18.04搭建【迅为iMX6Q】开发板嵌入式Linux开发编译环境01:uboot-imx编译_第1张图片

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

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

 

再次编译uboot-imx通过。

这样,uboot-imx正常的编译通过,和之前用过的ARM9处理器,编译方式大同小异。但这仅仅是开始,还没有真正的了解这个IMX6Q的驱动与应用,还需要多看数据手册、原理图、教程文档、网络资源等。

 

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

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

 

 

 

你可能感兴趣的:(嵌入式Linux)