正点原子IMX6ULL入门第一讲

写在前面

推荐视频:
韦东山的个人空间-韦东山个人主页-哔哩哔哩视频 (bilibili.com)](https://space.bilibili.com/275908810/channel/seriesdetail?sid=3810665)

正点原子视频:https://space.bilibili.com/394620890/channel/seriesdetail?sid=2042045

我用的是正点原子的板子,一开始看着韦东山老师的教程,看完基础篇后发现还是折回去看正点原子的视频,因为有些东西不兼容用起来挺麻烦的,推荐新手入门的话买谁家的板子就看谁的视频,这个环境搭建是都兼容的,然后我比较喜欢韦东山老师的方法,在win下编辑完代码再通过Filezilla传到Ubuntu,最后由挂载的nfs把文件传输到板子,还有XMobaterm和Filezilla等软件很好用,大家可以跟着我这个教程搭好环境,然后先看正点原子的C应用篇以及QT篇,看完再折回去看驱动开发,that is all,下面开始吧!

如何学习linux

image-20240418222912366

  • 学uboot要3-6个月,工作也基本用不上
  • 内核本身的裁剪移植一般是芯片厂家干的,不用我们干

所以先入门应用开发再回去学驱动开发

image-20240418223129792

windows和linux区别

文件系统

image-20240418225405132

ubuntu主要为分为文件系统

image-20240418225446916

Windows会分为很多盘符

文件树:

image-20240701082020038

image-20240701082857995

image-20240701082725961

dev表示分区,sda代表磁盘,1表示这是第一个分区,它挂载在Filesystem Root目录下

image-20240701084406066

Linux命令-shell

Shell 的意思是“外壳”,在 Linux 中它是一个程序,比如/bin/sh、/bin/bash 等。它负责接收用户的
输入,根据用户的输入找到其他相应的程序并运行。比如我们输入“ls”并回车时,shell 程序找到“ls”程序并
运行,把结果打印出来。
Shell 有很多种实现,我们常用 bash。

image-20240701145931812

Linux命令提示符

在 Ubuntu 中打开终端后,即可看到类似下图的提示符:代表成功进入终端,可输入命令

image-20240701202936145

image-20240701145406450

文中左下角绿色部分就是提示符

Linux命令格式

image-20240701145801308

选项部分可有可无,一般就是指操作范围或操作程度,记得前面要加“-”如

ls -l   显示更完整信息

常用命令

先讲下绝对路径和相对路径的概念

Linux 下的根目录为“/”,从根目录下出发可以找到任意目录、任意文件。从根目录开始表示目录或文
件的方法称为**“绝对路径”**。比如:

/home/book  根目录下的home目录下的book目录
/home/book/1.txt

相对路径:假设当前正位于/home/book 目录下,那么:

./1.txt        表示当前目录下的 1.txt,即 /home/book/1.txt;“.”表示当前目录 
../book/1.txt   表示当前目录的上一级目录里,book 子目录下的 1.txt 
              “/home/book/..”就是”/home”目录,”..”表示上一级目录

image-20240701204830042

pwd

打印当前所在路径

cd

切换路径

image-20240701204958351

$ cd  -   // 进入上次目录, 比如先进入 a 目录再进入 b 目录,执行此命令后即回到 a 目录 
$ cd  ~   // 进入家目录

mkdir和rmdir以及rm

mkdir:创建目录

image-20240701205223254

rmdir:删除目录,但是无法删除非空目录,所以一般我们用rm

rm:

rm [目录] -r //递归删除(即先删除文件夹内部文件,再删除文件夹),这样就可删除非空文件夹,我们这里一般把文件夹叫成目录
rm -rf [目录]//递归强制删除

image-20240701210135125

ls

列出目录内容

image-20240701205417220

cp

复制文件

image-20240701205812944

image-20240701205850493

*表示全部的意思,所以dir1/ * 表示dir1目录下全部文件

cat

查看文件内容

image-20240701210540177

touch

修改文件时间,如果没有这个文件则直接生成,可用于生成文件

touch [文件名]  把时间修改为当前时间

改变文件权限和属性

chgrp

image-20240701211444404

chown

image-20240701212125069

chmod

改变文件权限

image-20240701212253885

r表示可读,w表示可写,x表示可执行

image-20240701212534522

看一个目录的权限,只需要ls -l一下就出现了,最左边就是了;

image-20240701212852084

查找/搜索命令

find:根据文件名称查找

find 命令格式为:

find 目录名 选项 查找条件

image-20240701213338435

例三没有指定文件后缀

image-20240701213447800

grep:查找文件内容

grep 命令的作用是查找文件中符合条件的字符串

grep [选项] [查找模式] [文件名]。

image-20240701214124263

image-20240701162644300

加上-n就是顺便列出关键字在第几行

-nwr的r 表示递归查找,即不止查找当前目录,还查找其子目录里的文件

压缩/解压命令

单个文件的压缩(解压)使用 gzip 和 bzip2 ,多个文件和目录使用 tar。

gzip

image-20240702094119256

gzip 只能压缩单个文件,不能压缩目录

bzip2

image-20240702094450476

bzip2 只能压缩单个文件,不能压缩目录

tar

image-20240702094718862

c是第一个变量

image-20240702095953093

image-20240702095915591

image-20240702100012096

image-20240701165211833

网络

输入ifconfig可查看ip信息

sudo

在语句前加sudo就是以管理员的身份运行,当权限不够时就可以这样做

改成了所有者无法执行,这时候运行就会发现无权限,用sudo临时改成root用户才能运行

image-20240701155726262

image-20240701160132164

image-20240701160918753

su root //把用户从book切换到root

image-20240701161146524

修改path路径

image-20240702101735598

image-20240702101806306

image-20240701152517497

image-20240702103133403

所以就需要用绝对路径或相对路径运行,就算你已经在这个目录下也需要如此,或者修改path变量,把你当前文件夹包进去,又或者把你的文件复制到path变量里的文件夹都是可以的,具体如下:

image-20240701152846115

image-20240701153114942

image-20240701153415317

VI编辑器使用

image-20240702100252101

现场调试时,并没有 GUI 形式的编辑工具,vi 是唯一选择。

模式

image-20240702100659948

打开、新建、保存

image-20240702104107970

编辑模式

image-20240702104314623

image-20240702104410984

image-20240702104430111

image-20240702104455250

使用NAT配置网络环境

在 NAT 里,Ubuntu 要主动发起网络访问,需要经过 Windows 代劳,外面的设备只看到 Windows 发出的网络数据;Windows 收到数据的再转发给 Ubuntu。

即顺序为:ubuntu->Windows->开发板

在 NAT 里,外面的设备比如开发板要访问 Ubuntu,也只能通过 Windows 代劳:开发板是看不到Ubuntu 的,开发板是 ping 不通 Ubuntu 的。

开发板有时候是想访问 Windows,有时候是想让 Windows 代劳去访问 Ubuntu,Windows怎么区分?通过端口映射!

比如把 Windows 的 22 端口映射到 Ubuntu 的 22 端口,当开发板通过端口 22(这是 SSH 端口)访问Windows 的 IP 时,Windows 就知道:哦,这 22 端口数据不是发给我的,是要我转发给 Ubuntu 的。于是Windows 就把数据转发给 Ubuntu。这样开发板就可以通过 22 端口访问 Ubuntu 了。

Ubuntu配置NAT网络

先把Ubuntu设置为NAT模式

image-20240703154551094

从韦东山老师的网盘资料下载的ubuntu镜像是已经安装好NAT网卡的了,所以不需要再操作这一步了,如果发现没有的话可以添加网络适配器,具体看韦东山老师的视频P2

这就是我们的NAT网卡,Ubuntu可以他挂到Windows的网络从而借助Windows访问外部网络

image-20240703154901881

192.168.255.129是Ubuntu的IP地址

image-20240703155032795

设置NAT网络的端口映射

在 NAT 网络下,外面的设备无法看到 Ubuntu,要想开发板能访问到 Ubuntu,需要进行端口映射。 **先关闭 Ubuntu,再关闭 VMware,才能设置。 **

我们需要映射这几个端口:22(ssh 端口)、111(rpc 端口)、2049(nfs 端口)、9999(mountd 端口)。这样,开发板访问 Windows 的这些端口时,才可以访问到 Ubuntu。

image-20240716140422531

image-20240704093929381

image-20240704094002037

注:这个Ubuntu IP随时会改变,所以要是连不上的时候要重新去看Ubuntu的IP然后回到这里改IP,IP要写对,不然下面挂载NFS目录的时候就挂载不过去的!!!!

修改Ubuntu的mountd端口

在 NAT 网络下,要想开发板能通过 NFS 挂载 Ubuntu,需要修改 mountd 端口为 9999 。如果你还不会用 vi 命令,可以在 Ubuntu 桌面启动终端,执行以下命令,用 GUI 工具修改

sudo  gedit  /etc/services

image-20240704094227046

image-20240704094244906

到这里网络部分就配置完毕了,接下来可以验证网络

验证网络

windows能否ping通Ubuntu

image-20240704094735332

成功

Ubuntu能否ping通Windows

记得关防火墙

image-20240704094836008

image-20240704094903390

也成功了

Ubuntu和Windows能否ping通开发板

image-20240704095434702

image-20240704095411157

使用这个软件远程登录开发板的Ubuntu系统,给它设置ip

image-20240704095749953

image-20240704095830286

成功了,注意:开发板是没法ping通Ubuntu的,只能ping同Windows,然后Windows会根据端口号识别消息是发给自己还是Ubuntu,代转发。

编程前准备

使用 MobaXterm 远程登录 Ubuntu

image-20240704103323450

注意:对于使用 NAT 的 Ubuntu,上图中步骤 2 里输入的 IP 是 127.0.0.1;如果不是使用 NAT,则需要输入 Ubuntu 的 IP。

使用MobaXterm登录开发板

image-20240704111100378

这个是用串口,需要连接串口线,也可以用SSH连接,具体看韦东山的文档

使用 FileZilla 在 Windows 和 Ubuntu 之间传文件

image-20240704103644683

注意:对于使用 NAT 的 Ubuntu,上图中步骤 2 里输入的 IP 是 127.0.0.1;如果不是使用 NAT,则需要输入 Ubuntu 的 IP。

image-20240704104810469

红框的是文件夹下的具体文件

image-20240704104918223

将hello.c拖到Ubuntu的book文件夹下面然后直接编译运行

使用 FileZilla 在 Windows 和开发板之间传文件

image-20240704111533378

image-20240704111525549

Ubuntu和开发板文件互传

Ubuntu和开发板的文件互传可以使用scp指令,前提是先按着我前面那样配置网络,然后使用scp命令

image-20240803093005268

image-20240803093410450

安装Ubuntu软件

确保 Ubuntu 能上网之后,使用下面命令一键配置/初始化开发环境(其实就是安装 tftp,nfs,vim 等软件,此脚本只支持 Ubuntu-16.04 /Ubuntu-18.04)。

建议把命令行放到文本编辑器里排成一行,然后复制过来,在MobaXterm里直接右键就粘贴了,这样一般就是一整行,不放在一行复制的话粘贴进终端就会全乱了,肯定是报错的,当然有时候排成一行复制还是会乱,这个时候就需要一段一段复制了,然后在要换行的地方加个“\”敲下Enter就换行了。

复制以下三条命令即可

wget --no-check-certificate -0 Configuring_ubuntu.sh  https://weidongshan.coding.net/p/DevelopmentEnvConf/d/DevelopmentEnvConf/git/raw/master/Configuring_ubuntu.sh  
sudo chmod +x Configuring_ubuntu.sh

最后一条需要进到DevelopmentEnvConf目录里才能运行

sudo ./Configuring_ubuntu.sh

image-20240705093844590

配置ubuntu第一步出错 - NXP / IMX6ULL_PRO - 嵌入式开发问答社区 (100ask.net)

image-20240705094055242

将开发板挂载到Ubuntu的NFS目录

注意是在开发板上执行命令

注:Ubuntu IP随时会改变,所以要是连不上的时候要重新去看Ubuntu的IP然后回到虚拟网络编辑器那里改IP,IP要写对,不然下面挂载NFS目录的时候就挂载不过去的!!!!它会一直显示connection timeout。

image-20240705100019988

2049(nfs 端口)、9999(mountd 端口)

所以开发板想要访问Ubuntu的时候,也就是先通过windows的ip访问到windows,但是这个ip端口映射到了Ubuntu的端口上了,所以windows就知道这个消息不是给自己的,是给Ubuntu的,然后就把消息发到Ubuntu的ip上,这样Ubuntu就能收到板子信息了

所以在端口模式的方法下,我们用mount挂载nfs目录IP必须是Windows的,因为板子是ping不同Ubuntu的

image-20240705101019260

把后者挂到前者

在这之前记得设置开发板ip,不然是挂不上的!!!

image-20240705154913373

image-20240704111947357

源码和工具链下载

如果你用的是韦东山的这个镜像,那Linux源码是已经下好了的,不用再下了

image-20240705101238609

image-20240705101353830

放在这个路径下

如果没有的话就自己下,下这个全功能板的,我的板子是正点的imx6ull nand板,我推荐的是下这个全功能板,不是文档下面的mini nand板

image-20240705101448948

交叉编译工具链

交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其他平台上运行。 设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量

image-20240705101807363

这里韦东山老师已经修改了,但是好像不是这个板子的,改成上面这个,copy进去

搞完后关掉MobaXterm Ubuntu的界面,再连进去

然后运行

arm-linux-gnueabihf-gcc -v

image-20240705102101769

出现这样的信息就是ok了

运行第一个应用程序

编译程序

首先我推荐把在Ubuntu里文件放到 /home/book/nfs_rootfs 路径下,因为这个就是nfs目录,直接就同步到板子的/mnt目录了

接着在Ubuntu里对.c文件进行arm linux交叉编译,就会生成一个arm能运行的文件,比如:hello.c->hello

image-20240705103021074

image-20240705103034385

接着直接到开发板系统了,我们需要同步一下nfs的文件到/mnt文件夹(同步是每次上电必须做的)

image-20240705103221059

image-20240705103840782

可以在这里设置快捷方式

image-20240705103339856

mnt在根目录下

所以直接cd /mnt/

然后运行hello文件即可,:./hello

image-20240705103733841

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值