哈喽,你们好。我是小仲。板子在3.31号就收到了,然而,因为近来仍然很忙,拖到了现今才开始搭建环境。接出来的一段时间,会基于野火IMX6ULL开发板写一系列教程,主要注重于驱动和内核的调试方法。这方面的文章,我也是第一次写,过程中可能会踩不少坑,可能更新时间间隔会很。假如有写的不好的,你们可以及时强调,有任何意见和建议也可以联系我。
明天分享的是本次测评的第一篇文章,开发板的搭建环境教程。
本文由嵌入式与Linux这些事创作,未经作者授权,严禁转载。
CSDN:嵌入式与Linux这些事
IMX6ULL驱动开发实战连载系列总目录
文章目录
1.开箱测评1.1资料下载
野火资料下载链接如下。
综合资料百度云:提取码:4u7d
在线文档:
第一期-零基础入门篇-47集:
第二期-内核编程篇-20集:
第三期-裸机开发篇-21集:
第四期-驱动开发篇-82集:
全部视频网盘下载:提取码:wcfa
视频讲义网盘下载:提取码:a0h9
视频讲义库房:
建议观看在线文档。本地下载的pdf版本会有一些错误。
1.2开发板简介
之前学习驱动开发仍然使用的是韦老师的S3C2440,搭配韦老师的第二期视频一起学习,疗效很不错。因为马上要工作了,所以,想换一个新一点的平台,熟悉下环境。恰好见到了电子芯吧客的试用申请,于是,假期在家的时侯就递交了申请。明天总算收到了这块板子,话不多说,开箱测评。
如此大一个盒子,快件包裹的挺严实,上面塞了气泡膜,保护工作很到位。
奢华的袋子,来一张全家福,包括开发板,电源,两根USB线。
本次使用的是野火的IMX6ULL的NAND版本,具有512MB的NAND-FLASH,显存为800MHZ。开发板的底板资源插口如右图所示。野火提供了丰富的资料,对照教程我们可以轻松的让开发板跑上去。
2.环境搭建2.1烧录镜像到SD卡
因为本次使用的开发板为512MNand版本,因而,强烈建议你们打算一个2G以上的SD卡,将Debian镜像置于SD卡中,将开发板设置为SD卡启动。否则linux解压命令linux内存管理,只能烧录Debian镜像的纯净版。
烧录镜像文件,使用的是Etcher工具,在官网()可以按照自己笔记本系统,进行下载。
野火的镜像分为四个版本,在百度云盘可以下载到。(#debian)
imx6ull-debian-buster-console-armhf-2020-04-09.img.xz:Debian的纯净版固件,没有带桌面环境和野火的QTApp。(解压后约340M)
imx6ull-debian-buster-desktop-armhf-2020-04-09.img.xz:带有桌面环境的Debian固件,系统启动后会步入桌面环境。(解压后约1.1G)
imx6ull-debian-buster-full-qt-app-armhf-2020-04-09.img.xz::具有完整QTApp功能的Debian固件,系统启动后会步入QTApp的界面。
并且该固件容积超过了Nandflash512M的容量,因而不能烧写到Nandflash中。只可烧写于eMMC。(解压后约900M)
imx6ull-debian-buster-part-qt-app-armhf-2020-04-09.img.xz:该固件移不仅音视频播放功能的QTApp,系统启动后会步入QTApp的界面。
该固件容积大于Nandflash512M的容量,可以分别烧写到Nandflash和eMMC中。(解压后约420M)
点击以下两个按键,选择合适的镜像,烧写即可。
烧写完成后,将开发板上的拨码开关的2-5-8位拨到on,其他位拨到0,即可启动。
2.2挂载NFS网路文件系统2.2.1本机和虚拟机互ping
本教程中,使用的是Ubuntu18.03,在野火的资料包中可以找到Ubuntu18.03版本,在虚拟机中安装好即可。
尝试将开发板,本机,虚拟机联接在同一网关,在本机使用ipconfig命令linux开发教程,查看本机ip地址。记下这个地址,202.193.61.216。
在ubuntu18.04中,使用ifconfig命令查看ip地址,并且报错了。
按照提示,使用sudoaptinstallnet-tools命令,安装网路工具。
以上说明apt被某个进程锁住了linux开发教程,找到进程,kill就完了,如下:
强制重新配置软件包,升级下apt,而且又报错。
使用指令sudorm/var/lib/dpkg/lock-frontend,sudorm/var/lib/dpkg/lock删掉占用进程
使用指令sudoaptupdate再度尝试更新apt,成功!
使用指令sudoaptinstallnet-tools安装网路工具。
使用ifconfig,查看ip
注意:虚拟机的网路链接要设置成桥接模式,桥接到有线网卡。
尝试使用ping命令,本机和虚拟机互ping,成功ping通。
2.2.2虚拟机和开发板互ping
将开发板通过路由器和本机相连,启动开发板,使用MobaXterm配置一个并口与用户交互,并口配置如下所示:
启动开发板,通过并口就可以看见输出的启动信息。开发板出厂的默认帐号为debian,密码为temppwd。
使用ifconfig查看开发板的ip地址,开发板地址和虚拟机地址早已处于同一公网,不须要额外配置。尝试使用开发板ping虚拟机成功ping通。
开发板ping主机也可以ping通。
2.2.3配置虚拟机NFS服务
为了便捷测试驱动程序。通过NFS给开发板共享开发主机编撰的应用程序。开发板通过NFS与开发主机联接共享文件。开发主机生成的目标板应用程序置于NFS的共享文件夹内,开发板访问该文件夹执行应用程序进行测试。在另一方面,开发主机与开发板通过并口联接,使用并口终端控制开发板。
安装NFS
ubuntu中默认没有安装NFS服务,所以,须要使用sudoaptinstallnfs-kernel-server命令安装NFS。
使用sudovim/etc/exports更改配置文件,配置文件内容如下所示。
/home/zhongyi/workdir 202.193.61.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
使用id命令可以查看uid和gid。
本配置中的anonuid和anongid把顾客机的用户映射成本地uid/gid为1000的用户,即开发主机的embedfire,这么,当在开发板上使用与开发主机不同的用户访问NFS共享目录时,就会具有zhongyi的权限,便捷相互访问。
更改完/etc/exports文件并保存后,可使用sudoexportfs-arv命令更新配置。
安装NFS顾客端
开发主机开启NFS服务后,我们还须要在ubuntu安装NFS顾客端。执行sudoaptinstallnfs-common-y安装NFS顾客端。
查看NFS服务器共享目录
在开发板上执行showmount-e202.193.61.234查看NFS共享目录。
2.2.4临时挂载NFS文件系统
在开发板上,执行sudoaptinstallnfs-common-y安装NFS顾客端。
注意,假如你的板子是512MNand版本的,但是使用的是野火带qt的镜像。须要重新使用usb烧录纯净版系统镜像。否则会报错,提示c盘空间不足!
USB烧录镜像教程:#usb
使用mount命令挂载NFS服务器的共享目录到开发板/mnt目录下:
sudo mount -t nfs 202.193.61.234:/home/zhongyi/workdir /mnt
在NFS主机中,使用touchzhongyi.txt命令创建一个文件,测试下。
在从机中,也显示出了我们创建的文件。
2.3搭建交叉编译环境
在编译和装载驱动前,须要安装一些工具。工具的名称具体如下。
执行sudoaptinstallmakegcc-arm-linux-gnueabihfgccbisonflexlibssl-devdpkg-devlzop安装即可。
2.3.1获取内核源码
首先,使用以下命令安装git。
sudo apt-get install git
配置名子和邮箱。
git config --global user.name "xxx"
git config --global user.email xxx@xxx
使用git命令获取gitee上的源码。
git clone https://gitee.com/Embedfire/ebf-buster-linux.git
2.3.2编译源码
野火早已配置好了脚本make_deb.sh,执行脚本就可以编译内核。编译好的内核储存在build_image/build。
./make_deb.sh
make_deb.sh脚本内容如下。
deb_distro=bionic
DISTRO=stable
build_opts="-j 6"
build_opts="${build_opts} O=build_image/build" # 指定编译好的内核放置位置
build_opts="${build_opts} ARCH=arm" # 编译出来的目标是针对ARM 体系结构的内核
build_opts="${build_opts} KBUILD_DEBARCH=${DEBARCH}" # 对于deb-pkg 目标,允许覆盖deb-pkg 部署的常规启发式
build_opts="${build_opts} LOCALVERSION=-imx-r1" # 使用内核配置选项“LOCALVERSION”为常规内核版本附加一个唯一的后缀。
build_opts="${build_opts} KDEB_CHANGELOG_DIST=${deb_distro}"
build_opts="${build_opts} KDEB_PKGVERSION=1${DISTRO}"
build_opts="${build_opts} CROSS_COMPILE=arm-linux-gnueabihf-" # 指定交叉编译器
build_opts="${build_opts} KDEB_SOURCENAME=linux-upstream"
make ${build_opts} npi_v7_defconfig # 生成配置文件
make ${build_opts}
make ${build_opts} bindeb-pkg # 编译文件进行打包
2.3.3加载驱动程序
使用git克隆下解释器,尝试将驱动加载到开发板。
git clone https://gitee.com/Embedfire/embed_linux_tutorial
将拷贝下的源码,倒入内核源码的同一级目录中,如右图所示。
在hellomoudle中执行make,命令,就可以编译模块。
下边,看下hellomodule的makefile是怎样编撰的,具体如下所示。
KERNEL_DIR=../../ebf-buster-linux/build_image/build # 指定编译内核存放位置
ARCH=arm # 针对ARM 体系结构
CROSS_COMPILE=arm-linux-gnueabihf- # 指定交叉编译工具链
export ARCH CROSS_COMPILE # 导入环境变量
obj-m := hellomodule.o # 表示以模块编译
all: # all 只是个标号,可以自己定义,是make 的默认执行目标。
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) modules
.PHONE:clean copy
clean: # clean 就是删除后面这些由make 生成的文件。
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean
copy:
sudo cp *.ko /home/embedfire/workdir
在开发板中,使用以下命令,挂载NFS网路文件系统。
sudo mount -t nfs 202.193.61.234:/home/zhongyi/workdir /mnt
步入hellomoudle中,加载模块即可。
cd /mnt/module/hellomodule
sudo insmod hellomodule.ko
sudo rmmod hellomodule.ko
3.总结
至此,一个基本的驱动开发环境就搭载好了。下一节将开始介绍设备树的加载和编译方式。我作呕槽下野火的文档,有些地方是错误的,写的不够清楚。所以,你们在看的时侯,注意下。我早已将不合适的地方,反馈给她们,希望前面可以更改。
本文参考:野火Linux开发实战手册
文章评论