哈喽,大家好。我是小仲。板子在3.31号就收到了,但是,由于最近一直很忙,拖到了现在才开始搭建环境。接下来的一段时间,会基于野火IMX6ULL开发板写一系列教程,主要侧重于驱动和内核的调试技巧。这方面的文章,我也是第一次写,过程中可能会踩不少坑,可能更新时间间隔会很。如果有写的不好的,大家可以及时指出,有任何意见和建议也可以联系我。

今天分享的是本次测评的第一篇文章,开发板的搭建环境教程。

本文由嵌入式与Linux那些事创作,未经作者授权,禁止转载。

CSDN:嵌入式与Linux那些事

IMX6ULL驱动开发实战连载系列总目录

文章目录

  • 1. 开箱测评
    • 1.1 资料下载
    • 1.2 开发板简介
  • 2. 环境搭建
    • 2.1 烧写镜像到SD卡
    • 2.2 挂载NFS网络文件系统
      • 2.2.1 本机和虚拟机互ping
      • 2.2.2 虚拟机和开发板互ping
      • 2.2.3 配置虚拟机NFS服务
        • 安装NFS
        • 安装NFS客户端
        • 查看NFS 服务器共享目录
      • 2.2.4 临时挂载NFS文件系统
    • 2.3 搭建交叉编译环境
      • 2.3.1 获取内核源码
      • 2.3.2 编译源码
      • 2.3.3 加载驱动程序
  • 3. 总结

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线。

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

2. 环境搭建

2.1 烧写镜像到SD卡

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

烧写镜像文件,使用的是Etcher工具,在官网(https://www.balena.io/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。

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

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

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

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

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

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

使用指令sudo apt install net-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服务,所以,需要使用sudo apt install nfs-kernel-server命令安装NFS。

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

/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。

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

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

安装NFS客户端

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

查看NFS 服务器共享目录

在开发板上执行showmount -e 202.193.61.234查看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 目录下:

sudo  mount -t nfs 202.193.61.234:/home/zhongyi/workdir /mnt

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

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

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。

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 copyclean:                                                            # 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开发实战指南

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16933601/article/details/115577406

IMX6ULL驱动开发实战连载-01搭建开发环境相关推荐

  1. Android开发实战一之搭建开发环境-附测试实例(已亲测)

    使用JDK.Android SDK.Eclipse + ADT搭建开发环境      附测试实例     (已亲测) ----------------------------------------- ...

  2. 视频教程-微信小程序开发实战之番茄时钟开发-微信开发

    微信小程序开发实战之番茄时钟开发 4年web前后端开发经验,熟悉PHP,Python后端技术,熟悉基于Lnmp环境的项目开发和部署,擅长Yii,ThinkPHP,CI,Django,Flask等国内外 ...

  3. 视频教程-微信公众平台开发实战PHP版-微信开发

    微信公众平台开发实战PHP版 互联商通创始人/架构师, 在IT领域摸爬滚打20年的全栈老程序员(架构师.培训讲师).熟悉iOS.Android及LNMP的架构下快速开发互联网相关项目.精通微信和支付宝 ...

  4. 安卓驱动开发(五)----搭建开发板的测试环境

    在第四章中,介绍的是安卓应用程序开发环境和linux内核开发环境.这两套开发环境都是linux开发和测试的前提.有了两套开发环境,接下来就应该考虑,测试好的linux驱动应该在哪里运行,运行环境是什么 ...

  5. 云炬Qtpy5开发与实战笔记 0搭建开发环境(傻瓜式安装)

    目录 1安装python和qtpy 2安装pycharm和Qt creator 2.1安装pycharm 傻瓜式安装 在PyCharm导入Anaconda 2.2安装Qt creator 1安装pyt ...

  6. 【系】微信小程序云开发实战坚果商城-云开发开篇

    第 3-2 课:云开发开篇 目录 开篇 [系]微信小程序云开发实战坚果商城-开篇 基础篇 [系]微信小程序云开发实战坚果商城-弹性盒子 [系]微信小程序云开发实战坚果商城-ES6 简单入门 [系]微信 ...

  7. 【系】微信小程序云开发实战坚果商城-云开发之商品信息和主题商品数据实现

    第 3-8 课:云开发之商品信息和主题商品数据实现 目录 开篇 [系]微信小程序云开发实战坚果商城-开篇 基础篇 [系]微信小程序云开发实战坚果商城-弹性盒子 [系]微信小程序云开发实战坚果商城-ES ...

  8. 【系】微信小程序云开发实战坚果商城-云开发之订单品数据实现

    第 3-9 课:云开发之订单品数据实现 目录 开篇 [系]微信小程序云开发实战坚果商城-开篇 基础篇 [系]微信小程序云开发实战坚果商城-弹性盒子 [系]微信小程序云开发实战坚果商城-ES6 简单入门 ...

  9. 【系】微信小程序云开发实战坚果商城-云开发之首页数据实现

    第 3-6 课:云开发之首页数据实现 目录 开篇 [系]微信小程序云开发实战坚果商城-开篇 基础篇 [系]微信小程序云开发实战坚果商城-弹性盒子 [系]微信小程序云开发实战坚果商城-ES6 简单入门 ...

最新文章

  1. Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
  2. java集群_Kafka多节点分布式集群搭建实现过程详解_java
  3. Leetcode Math刷题笔记
  4. 9999元起!荣耀Magic V今日首销:首款骁龙8折叠屏旗舰
  5. 2015-01-11 在SQL2008创建一个数据库
  6. 跟踪oracle中sql语句运行过程及相关知识拓展
  7. svm理论与实验之1
  8. python Image 模块处理图片
  9. Docker概述 官方文档 Google翻译
  10. [it-ebooks]电子书列表v0.1.1
  11. FAT32文件操作系统
  12. 把chrome的多微博插件FaWave变成桌面程序!
  13. vue嵌入app中——首次加载慢的动画
  14. Linux服务器之间使用scp免密传输文件
  15. 电脑无线(外网)和有线(内网)网络同时使用方法
  16. 开发电商网站应该注意哪些
  17. Objective-C---8---@property KVC
  18. 洛谷4895 独钓寒江雪 (树哈希+dp+组合)
  19. 素数问题 java_JAVA素数问题
  20. 提高晚上学习效率的11个方法

热门文章

  1. API数据传输,flask发送接收两种方式/cryptography is required for sha256_password or caching_sha2_password
  2. linux安装时权限不够,linux npm全局安装权限不足问题的正确解决办法
  3. 2023阿里云服务器4核8G费用表出炉
  4. android 平台接口文档,开放平台-文档
  5. 2019上半年前端面经总结(前端开发实习生)
  6. Keil 更新 J-Link DLL
  7. js 滚动监听,核心方法
  8. java计算机毕业设计古玩玉器交易系统MyBatis+系统+LW文档+源码+调试部署
  9. 电信烽火2821t虚拟服务器设置,终端使用指南
  10. source insight恢复默认布局