前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IMX6ULL驱动开发实战连载-01搭建开发环境

IMX6ULL驱动开发实战连载-01搭建开发环境

作者头像
嵌入式与Linux那些事
发布2021-05-20 14:17:10
2K0
发布2021-05-20 14:17:10
举报

哈喽,大家好。我是小仲。板子在3.31号就收到了,但是,由于最近一直很忙,拖到了现在才开始搭建环境。接下来的一段时间,会基于野火IMX6ULL开发板写一系列教程,主要侧重于驱动和内核的调试技巧。这方面的文章,我也是第一次写,过程中可能会踩不少坑,可能更新时间间隔会很。如果有写的不好的,大家可以及时指出,有任何意见和建议也可以联系我。 今天分享的是本次测评的第一篇文章,开发板的搭建环境教程。 本文由嵌入式与Linux那些事创作,未经作者授权,禁止转载。

1. 开箱测评

1.1 资料下载

野火资料下载链接如下。

综合资料百度云:https://pan.baidu.com/s/1kJdJ6xc12Yg4rPby_MatDA 提取码:4u7d

在线文档:http://doc.embedfire.com/linux/imx6/base/

第一期-零基础入门篇-47集 :https://www.bilibili.com/video/BV1JK4y1t7io

第二期-内核编程篇-20集 :https://www.bilibili.com/video/BV1PK411T7MA

第三期-裸机开发篇-21集 :https://www.bilibili.com/video/BV1JK4y1Y7xQ

第四期-驱动开发篇-82集 :https://www.bilibili.com/video/BV1pf4y1974n

全部视频云盘下载:https://pan.baidu.com/s/1jp15pPk5gCF3q2IKDF_95A 提取码:wcfa

视频课件云盘下载:https://pan.baidu.com/s/1NM47YIOC6JWu95uCDZ0NyA 提取码:a0h9

视频课件仓库 :https://gitee.com/Embedfire-imx6/embed_linux_tutorial_ppt

建议观看在线文档。本地下载的pdf版本会有一些错误。

1.2 开发板简介

之前学习驱动开发一直使用的是韦老师的S3C2440,搭配韦老师的第二期视频一起学习,效果很不错。由于马上要工作了,所以,想换一个新一点的平台,熟悉下环境。正好看到了电子芯吧客的试用申请,于是,寒假在家的时候就提交了申请。今天终于收到了这块板子,话不多说,开箱测评。

这么大一个袋子,快递包裹的挺严实,里面塞了气泡膜,保护工作很到位。

精致的盒子,来一张全家福,包括开发板,电源,两根USB线。

image-20210404160221417
image-20210404160221417

本次使用的是野火的IMX6ULL的NAND版本,具有512MB的NAND-FLASH,主频为800MHZ。开发板的底板资源接口如下图所示。野火提供了丰富的资料,对照教程我们可以轻松的让开发板跑起来。

2. 环境搭建

2.1 烧写镜像到SD卡

由于本次使用的开发板为512M Nand 版本,因此,强烈建议大家准备一个2G以上的SD卡,将Debian镜像放在SD卡中,将开发板设置为SD卡启动。否则,只能烧写Debian镜像的纯净版。

烧写镜像文件,使用的是Etcher工具,在官网(https://www.balena.io/etcher/)可以根据自己电脑系统,进行下载。

Etcher工具界面
Etcher工具界面

野火的镜像分为四个版本,在百度网盘可以下载到。(http://products.embedfire.com/zh_CN/latest/linux/ebf_i.mx6ull.html#debian)

各个版本镜像
各个版本镜像

imx6ull-debian-buster-console-armhf-2020-04-09.img.xz:Debian 的纯净版固件,没有带桌面环境和野火的QT App。(解压后约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::具有完整QT App 功能的Debian 固件, 系统启动后会进入QT App 的界面。 但是该固件体积超过了Nandflash 512M 的容量,因此不能烧录到Nandflash 中。只可烧录于eMMC。(解压后约900M)

imx6ull-debian-buster-part-qt-app-armhf-2020-04-09.img.xz:该固件移除了音视频播放功能的QT App,系统启动后会进入QT App 的界面。 该固件体积小于Nandflash 512M 的容量,可以分别烧录到Nandflash 和eMMC 中。(解压后约420M)

点击以下两个按钮,选择合适的镜像,烧录即可。

烧录界面
烧录界面

烧录完成后,将开发板上的拨码开关的2-5-8位拨到on,其他位拨到0,即可启动。

2.2 挂载NFS网络文件系统

2.2.1 本机和虚拟机互ping

本教程中,使用的是Ubuntu18.03,在野火的资料包中可以找到Ubuntu18.03版本,在虚拟机中安装好即可。

尝试将开发板,本机,虚拟机连接在同一网段,在本机使用ipconfig命令,查看本机ip地址。记下这个地址,202.193.61.216。

查看本机ip地址
查看本机ip地址

在ubuntu18.04中,使用ifconfig命令查看ip地址,但是报错了。

使用ifconfig命令查看ip地址
使用ifconfig命令查看ip地址

根据提示,使用 sudo apt install net-tools 命令,安装网络工具。

成功安装,但仍有错误
成功安装,但仍有错误

以上说明apt被某个进程锁住了,找到进程,kill 就完了,如下:

删除占用进程
删除占用进程

强制重新配置软件包,升级下apt,但是又报错。

升级apt报错
升级apt报错

使用指令sudo rm /var/lib/dpkg/lock-frontendsudo rm /var/lib/dpkg/lock删除占用进程

删除占用
删除占用
移除锁定文件
移除锁定文件

使用指令sudo apt update再次尝试更新apt,成功!

成功更新apt
成功更新apt

使用指令sudo apt install net-tools安装网络工具。

成功安装网络工具
成功安装网络工具

使用ifconfig,查看ip

查看虚拟机ip地址
查看虚拟机ip地址

注意:虚拟机的网络链接要设置成桥接模式,桥接到有线网卡。

尝试使用ping命令,本机和虚拟机互ping,成功ping通。

本机和虚拟机互ping
本机和虚拟机互ping

2.2.2 虚拟机和开发板互ping

将开发板通过路由器和本机相连,启动开发板,使用MobaXterm 配置一个串口与用户交互,串口配置如下所示:

MobaXterm配置
MobaXterm配置

启动开发板,通过串口就可以看到输出的启动信息。开发板出厂的默认账号为debian,密码为temppwd。

成功启动
成功启动

使用ifconfig查看开发板的ip地址,开发板地址和虚拟机地址已经处于同一网段,不需要额外配置。尝试使用开发板ping虚拟机成功ping通。

开发板ping虚拟机
开发板ping虚拟机

开发板ping主机也可以ping通。

开发板ping主机
开发板ping主机

2.2.3 配置虚拟机NFS服务

为了方便测试驱动程序。通过NFS 给开发板共享开发主机编写的应用程序。开发板通过NFS与开发主机连接共享文件。开发主机生成的目标板应用程序放在NFS 的共享文件夹内,开发板访问该文件夹执行应用程序进行测试。在另一方面,开发主机与开发板通过串口连接,使用串口终端控制开发板。

安装NFS

ubuntu中默认没有安装NFS服务,所以,需要使用sudo apt install nfs-kernel-server命令安装NFS。

使用sudo vim /etc/exports修改配置文件,配置文件内容如下所示。

代码语言:javascript
复制
/home/zhongyi/workdir 202.193.61.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
  • /home/embedfire/workdir:要共享的开发主机目录,注意使用空格与后面的配置隔开。
  • 202.193.61.0/24: 配置谁可以访问。/24表示 202.193.61.网段的所有机器都可以访问。
  • rw: 表示客户机的权限,rw 表示可读写
  • sync:资料同步写入到内存与硬盘中。
  • anonuid=1000:将客户机上的用户映射成指定的本地用户ID的用户,此处1000是开发主机zhongyi用户的uid。
  • anongid=1000:将客户机上的用户映射成属于指定的本地用户组ID,此处1000是开发主机zhongyi用户组gid。
  • no_subtree_check:不检查子目录权限,默认配置。

使用id命令可以查看uid和gid。

id命令查看uid
id命令查看uid

本配置中的anonuid 和anongid 把客户机的用户映射成本地uid/gid 为1000的用户,即开发主机的embedfire,那么,当在开发板上使用与开发主机不同的用户访问NFS 共享目录时,都会具有zhongyi 的权限,方便互相访问。

修改完/etc/exports 文件并保存后,可使用sudo exportfs -arv 命令更新配置。

更新exporfts配置文件
更新exporfts配置文件
安装NFS客户端

开发主机开启NFS 服务后,我们还需要在ubuntu安装NFS 客户端。执行sudo apt install nfs-common -y安装NFS 客户端。

安装NFS客户端
安装NFS客户端
查看NFS 服务器共享目录

在开发板上执行showmount -e 202.193.61.234查看NFS共享目录。

查看NFS 服务器共享目录
查看NFS 服务器共享目录

2.2.4 临时挂载NFS文件系统

在开发板上,执行sudo apt install nfs-common -y安装NFS客户端。

注意,如果你的板子是512M Nand 版本的,并且使用的是野火带qt的镜像。需要重新使用usb烧写纯净版系统镜像。否则会报错,提示磁盘空间不足!

磁盘空间不足
磁盘空间不足

USB烧写镜像教程:https://doc.embedfire.com/linux/imx6/quick_start/zh/latest/quick_start/install_debian/install_debian.html#usb

使用mount 命令挂载NFS 服务器的共享目录到开发板/mnt 目录下:

代码语言:javascript
复制
sudo  mount -t nfs 202.193.61.234:/home/zhongyi/workdir /mnt
成功挂载
成功挂载

在NFS主机中,使用touch zhongyi.txt命令创建一个文件,测试下。

在主机上touch一个文件
在主机上touch一个文件

在从机中,也显示出了我们创建的文件。

2.3 搭建交叉编译环境

在编译和装载驱动前,需要安装一些工具。工具的名称具体如下。

  • gcc-arm-linux-gnueabihf 交叉编译器
  • bison 语法分析器
  • flex 词法分析器
  • libssl-dev OpenSSL 通用库
  • lzop LZO 压缩库的压缩软件

执行sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop安装即可。

2.3.1 获取内核源码

首先,使用以下命令安装git。

代码语言:javascript
复制
sudo apt-get install git

配置名字和邮箱。

代码语言:javascript
复制
git config --global user.name "xxx"
git config --global user.email xxx@xxx

使用git命令获取gitee上的源码。

代码语言:javascript
复制
git clone https://gitee.com/Embedfire/ebf-buster-linux.git

2.3.2 编译源码

野火已经配置好了脚本make_deb.sh,执行脚本就可以编译内核。编译好的内核存放在build_image/build。

代码语言:javascript
复制
./make_deb.sh

make_deb.sh脚本内容如下。

代码语言:javascript
复制
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克隆下例程,尝试将驱动加载到开发板。

代码语言:javascript
复制
git clone https://gitee.com/Embedfire/embed_linux_tutorial

将拷贝下的源码,放入内核源码的同一级目录中,如下图所示。

同级目录编译
同级目录编译

在hellomoudle中执行make,命令,就可以编译模块。

编译hello模块
编译hello模块

下面,看下hellomodule的makefile是如何编写的,具体如下所示。

代码语言:javascript
复制
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网络文件系统。

代码语言:javascript
复制
sudo  mount -t nfs 202.193.61.234:/home/zhongyi/workdir /mnt  

进入hellomoudle中,加载模块即可。

代码语言:javascript
复制
cd /mnt/module/hellomodule
sudo insmod hellomodule.ko
sudo rmmod hellomodule.ko
加载和卸载测试模块
加载和卸载测试模块

3. 总结

至此,一个基本的驱动开发环境就搭载好了。下一节将开始介绍设备树的加载和编译方法。我想吐槽下野火的文档,有些地方是错误的,写的不够清楚。所以,大家在看的时候,注意下。我已经将不合适的地方,反馈给他们,希望后面可以修改。

本文参考:野火Linux开发实战指南

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 开箱测评
    • 1.1 资料下载
      • 1.2 开发板简介
      • 2. 环境搭建
        • 2.1 烧写镜像到SD卡
          • 2.2 挂载NFS网络文件系统
            • 2.2.1 本机和虚拟机互ping
            • 2.2.2 虚拟机和开发板互ping
            • 2.2.3 配置虚拟机NFS服务
            • 2.2.4 临时挂载NFS文件系统
          • 2.3 搭建交叉编译环境
            • 2.3.1 获取内核源码
            • 2.3.2 编译源码
            • 2.3.3 加载驱动程序
        • 3. 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档