400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

IT技术专家手把手教你:i.MX6ULL开发环境快速搭建指南

最近,我将自己的旧笔记本升级到了 Ubuntu 系统,替换了原本的 Windows。这一改变让我体验到了 Ubuntu 带来的便利和高效。即便是在配置稍显落后的老笔记本上,Ubuntu 的运行依旧流畅。当然,转换过程中不可避免的需要重新配置开发环境,这篇文章将分享我的配置过程。
首先,我安装了交叉编译器。根据相关教程,安装过程并不复杂,步骤也详尽明了。安装完成后,可以使用 `pwd` 命令来获取当前的工作路径。
接下来,我编译了 uboot。这一步可以参考网络上关于 uboot 编译的教程,里面包含了必要的介绍和操作步骤,这里就不详细展开了。
为了让 Linux 系统可以通过网络启动,我查阅了相关资料。在 Ubuntu 20 中,你可以使用 `ip addr` 命令查看 IP 地址,而在 Windows 11 中,则可以使用 `Ipconfig`。为了确保网络畅通无阻,我关闭了 Windows 11 的防火墙,并在 uboot 中设置了相关的环境变量,包括开发板的 IP 地址、MAC 地址、默认网关子网掩码,同时指定了服务器 IP,即 Ubuntu 的 IP 地址。配置完成后,重启开发板,确保 Ubuntu 和 Windows 11 都处于同一局域网内。
随后,我搭建了 TFTP 服务,以测试 Linux 是否能够通过网络启动。这一过程涉及到设置环境变量、下载启动文件以及启动内核等步骤。具体操作命令在 uboot 中执行,包括设置 bootargs 和 bootcmd,然后通过 tftp 命令下载 zImage 文件和设备树文件,最后使用 bootz 命令启动内核。
在内核编译方面,我参考了关于内核移植的教程,其中详细介绍了如何从零开始配置和编译 Linux 内核。编译完成后,生成的 zImage 文件存放在特定的目录下,这是启动 Linux 系统的关键文件。
此外,构建根文件系统也是至关重要的一步。我参考了相关教程,了解了如何从头构建根文件系统。在 uboot 中配置了 bootargs,以通过网络文件系统启动。如果遇到根文件系统挂载失败的问题,可能是因为 NFS 版本不兼容。解决这个问题,需要在 Ubuntu 的 NFS 服务器配置文件中添加相应的参数,以支持较低的 NFS 版本。
最后,我开发了新的字符驱动。在编译过程中遇到了一些问题,但通过修改内核的 Makefile 文件,问题得以解决。完成驱动的加载后,我测试了相关应用程序,至此,开发环境的基本搭建就完成了。
整个配置过程虽然繁琐,但通过查阅资料和不断尝试,最终实现了预期的效果。希望我的经验能对有类似需求的朋友有所帮助。

最近换了新的笔记本,就把老的笔记本装了ubuntu,使用体验比虚拟机好很多,就算是老笔记本的配置,带个ubuntu还是非常流畅的,就是要重新配置环境,这篇文章就来记录下环境配置。

IT技术专家手把手教你:i.MX6ULL开发环境快速搭建指南

| 交叉编译器安装

交叉编译参考交叉编译器安装这篇推文,具体步骤记录得非常清楚。想要获取当前路径,可以使用 pwd 命令:

0d61bdc6-2c9b-11ee-815d-dac502259ad0.png

| uboot编译

uboot编译参照uboot初探这篇推文,里边有相关介绍和操作,这里就不做过多介绍。

0d9fa910-2c9b-11ee-815d-dac502259ad0.png

| 从网络启动 Linux 系统

可以通过从网络启动Linux系统这篇文章了解相关内容,在ubuntu20中查看ip地址可以使用 ip addr查看,在win11中可以使用ipconfig查看ip,在保证网线接到同一局域网中,还需要配置uboot才能ping通win11和win11,win11需要关闭防火墙,配置如下:

setenvipaddr192.168.2.50//开发板IP地址
setenvethaddrb81d:01:00:00//开发板网卡MAC地址
setenvgatewayip192.168.2.1//开发板默认网关
setenvnetmask255.255.255.0//开发板子网掩码
setenvserverip192.168.2.55/服务器地址,也就是Ubuntu地址
saveenv//保存环境变量

配置完后再重启开发板,再ping通win11和ubuntu,确保它们都在同一局域网下面。最后再搭建TFTP服务,测试linux能否正常通过网络启动。

测试启动

1、设置环境变量

进入uboot中,输入下面配置:

setenvbootargs'console=ttymxc0,115200root=/dev/mmcblk1p2rootwaitrw'
setenvbootcmd'tftp80800000zImage;tftp83000000imx6ull-14x14-evk-emmc.dtb;bootz80800000-83000000'
saveenv

2、下载文件

进入uboot中,输入下面命令:

tftp80800000zImage
tftp83000000imx6ull-14x14-evk-emmc.dtb

3、启动内核

进入uboot中,输入下面命令:

bootz80800000-83000000

| 编译内核

内核的编译可以参考移植内核这篇推文,里边有相关内容介绍及实现过程等。

内核编译配置如下:

#!/bin/sh
#编译之前先清理
makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distclean
#配置Linux内核
makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-imx_v7_mfg_defconfig
#编译Linux内核
makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-all-j16

最终会生成一个很重要的文件,就是zImage文件,下方是它存放在系统中的详细路径:

Linux内核镜像文件:
存放路径为arch/arm/boot/zImage

IMX6ULL EVK开发板对应的设备树文件:
存放路径为arch/arm/boot/dts/imx6ull-14x14-evk.dtb

| 编译根文件系统

根文件系统相关知识可以借鉴根文件系统构建这篇推文,详细介绍了如何从零到一构建一个根文件系统。

uboot配置:

setenvbootargs'console=ttymxc0,115200root=/dev/nfsnfsroot=192.168.2.55:/home/noah/linux/nfs/rootfs,proto=TCPrwip=192.168.2.50192.168.2.1off'
saveenv

如果遇到根文件挂载失败的,可以借鉴以下下面的方法:

原因:因为ubuntu的nfs版本为version4,而板子的nfs版本为version2,所以直接挂载上去无法识别

解决方法:在 /etc/default/nfs-kernel-server的最后一行添加以下代码:

RPCNFSDOPTS="--nfs-version2,3,4--debug--syslog"

具体看下图(使用命令:sudo gedit nfs-kernel-server):

0dd50682-2c9b-11ee-815d-dac502259ad0.png

| 新字符驱动

字符驱动可以借鉴新字符设备驱动模板这篇文章,里边有完整的相关说明及源代码;从官方下载了Linux kernel源码进行编译,遇到如下错误:

cc1: error: code model kernel does not support PIC mode 解决方法:打开官方内核源码,在Makefile中对应修改一下:

ARCH?=arm
CROSS_COMPILE?=arm-linux-gnueabihf-
#Architectureaspresentincompile.h
UTS_MACHINE:=$(ARCH)
SRCARCH:=$(ARCH)

和


KBUILD_CFLAGS:=-Wall-Wundef-Wstrict-prototypes-Wno-trigraphs
-fno-strict-aliasing-fno-common
-Werror-implicit-function-declaration
-Wno-format-security
-std=gnu89-fno-pie

图片如下:

0e0bac14-2c9b-11ee-815d-dac502259ad0.png

0e276c74-2c9b-11ee-815d-dac502259ad0.png

最后加载驱动,然后测试应用程序,到此驱动开发环境基本搭建完成!






审核编辑:刘清

【限时免费】一键获取网络规划系统模板+传输架构设计+连通性评估方案

相关文章

服务电话:
400-035-6699
企服商城