I.MX6ULL ARM Linux学习笔记

写在前面

本文章为我在学习I.MX6ULL ARM Linux时的记录文章,知识来源为《正点原子阿尔法 I.MX6ULL ARM Linux开发板》的视频教程和野火《i.MX Linux开发实战指南》的视频和电子书籍。

学习笔记涉及在学习过程中有关安装,使用,编程,debug的相关知识点和技巧,在一套教程学习完毕后,我将再次整理本笔记,将其中重要的坑点,知识点和一些技巧和问题解决等整理成专栏,敬请大家静待花开,谢谢!

S1:U-Boot

在这里插入图片描述

U-Boot启动界面:(串口)
启动时3秒内按Enter进入U-Boot命令行模式。
在这里插入图片描述
注意:
1.ARM没有PC机中的BIOS,Uboot就类似于BIOS+系统引导程序
2.U-Boot 最重要的功能就是初始化DDR,并将linux镜像和dts设备数拷贝到内存中。
3.大多数的ARM在引导linux之前都需要U-Boot初始化DDR,但有一些ARM的bootROM(就比如I.MX6ULL)会自动初始化DDR,无需U-Boot再初始化了。

S2:正点原子U-Boot编译

在这里插入图片描述
在这里插入图片描述

也可以直接在MakeFile中写好ARCH和CROSS_COMPILE:
在这里插入图片描述

S3:U-Boot基本命令第1讲:help、bdinfo和环境变量命令

1.help命令:?+命令名
例子:

? boot

2.信息查看命令:板子信息

 bdinfo

3.与环境变量有关的命令:

1.setenv(重点):增,删,改环境变量信息
(注意 字符串和带空格的要加单引号把整个串括起来,单纯数字不用引号)
举例:
新增一个名为author 的环境变量,值为whstudio并保存

setenv author 'whstudio'
saveenv

删除一个名为author 的环境变量并保存(将值置为空就是删除)

setenv author
saveenv

修改一个名为author 的环境变量,值为whstudio并保存(环境变量存在就是修改)

setenv author 'whstudio'
saveenv

2.printenv(重点):查环境变量信息
举例:
查看所有环境变量:

printenv

S4:U-Boot基本命令第2讲:内存操作命令

内存操作命令(阅读说明1):

命令用途格式举例说明
md显示内存值md[.b, .w, .l] address [# of objects]md.b 80000000 140X80000000 开始的 20 个字节的内存值
nm修改指定地址的内存值nm [.b, .w, .l] addressnm.l 80000000以.l 格式修改 0x80000000 地址的数据为 0x12345678(阅读说明2)
mm修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增mm [.b, .w, .l] addressmm.l 80000000以.l 格式修改 0x80000000 为起始地址的数据
mw使用一个指定的数据填充一段内存mw [.b, .w, .l] address value [count]mw.l 80000000 0A0A0A0A 10使用.l 格式将以 0X80000000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A
cp数据拷贝命令cp [.b, .w, .l] source target countcp.l 80000000 80000100 10使用.l 格式将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节)
cmp比较命令,用于比较两段内存的数据是否相等cmp [.b, .w, .l] addr1 addr2 countcmp.l 80000000 80000100 10使用.l 格式来比较 0x80000000 和 0X80000100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节)

说明1:
命令中的[.b .w .l]对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值。address 就是要查看的内存起始地址,[# of objects]表示要查看的数据长度,这个数据长度单位不是字节,而是跟你所选择的显示格式有关。比如你设置要查看的内存长度为20(十六进制为 0x14),如果显示格式为.b 的话那就表示 20 个字节;如果显示格式为.w 的话就表示 20 个 word,也就是 202=40 个字节;如果显示格式为.l 的话就表示 20 个 long,也就是204=80 个字节。另外要注意:
uboot 命令中的数字都是十六进制的!不是十进制的!

说明2:
输入上述命令以后如图 30.4.3.2 所示:
在这里插入图片描述
图 30.4.3.2 nm 命令
在图 30.4.3.2 中,80000000 表示现在要修改的内存地址,ffffff00 表示地址 0x80000000 现在的数据,?后面就可以输入要修改后的数据 0x12345678,输入完成以后按下回车,然后再输入‘q’即可退出,如图 30.4.3.3 所示:
在这里插入图片描述
图 30.4.3.3 修改内存数据
修改完成以后在使用命令 md 来查看一下有没有修改成功,如图 30.4.3.4 所示:
图 30.4.3.4 查看修改后的值
在这里插入图片描述
从图 30.4.3.4 可以看出,此时地址 0X80000000 的值变为了 0x12345678。

S5:U-Boot基本命令第3讲:网络操作命令

要使用网络首先要配置一些环境变量:

环境变量描述
ipaddr开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址。
ethaddr开发板的 MAC 地址,一定要设置。
gatewayip网关地址。
netmask子网掩码。
serverip服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。

例如:

setenv ipaddr 192.168.1.50 
setenv ethaddr 00:04:9f:04:d2:35 
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250 
saveenv

注意:
网络地址环境变量的设置要根据自己的实际情况,确保 Ubuntu 主机和开发板的 IP 地址在同一个网段内。

比如我现在的开发板和电脑都在 192.168.1.0 这个网段内,所以设置开发板的 IP 地址为 192.168.1.50,我的 Ubuntu 主机的地址为 192.168.1.250,因此 serverip 就是192.168.1.250。

ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的 ethaddr 是不同的,否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。

命令用途格式举例说明
ping是否可以与指定ip进行通信ping ipping 192.168.1.250注意!只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
dhcp用于从路由器获取 IP 地址dhcpdhcp直接输入 dhcp 命令即可通过路由器获取到 IP 地址
nfs通过 nfs 可以在计算机之间通过网络来分享资源nfs [loadAddress] [[hostIPaddr:]bootfilename]nfs 80800000 192.168.1.250:/home/zuozhongkai/linux/nfs/zImage使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处 (ubuntu系统上要建立并开启nfs服务)
tftp通过网络下载东西到 DRAM 中tftpboot [loadAddress] [[hostIPaddr:]bootfilename]tftp 80800000 zImage将 tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处 (ubuntu系统上要建立并开启tftp服务)

注意点1:
nfs 命令的区别在于,tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。

注意点2:
在这里插入图片描述
在图 中可以看到“TFTP error: ‘Permission denied’ (0)”这样的错误提示,提示没有权限,出现这个错误一般有两个原因:
①、在 Ubuntu 中创建 tftpboot 目录的时候没有给予 tftboot 相应的权限。
②、tftpboot 目录中要下载的文件没有给予相应的权限。
针对上述两个问题,使用命令“chmod 777 xxx”来给予权限,其中“xxx”就是要给予权限的文件或文件夹。

S6:U-Boot基本命令第4讲:FAT操作命令

S7:U-Boot基本命令第5讲:boot相关操作命令

S8:ubuntu下交叉编译工具与传输环境搭建

安装VScode
VScode其实在linux下可以直接运行,不需要安装
我们要做的是给文件夹找一个合适的位置,然后把开始菜单和桌面的程序图标加进去

第一步:下载VScode
在Visual Studio Code官网下载:
VScode linux 64位

第二步:解压缩文件

tar -xvzf code-stable-1536736541.tar.gz

第三步:移动到/usr/local/ 目录,给可执行的权限, 然后就已经可以运行了

mv VSCode-linux-x64 /usr/local/
chmod +x /usr/local/VSCode-linux-x64/code

第四步:添加到开始菜单和桌面
复制一个VScode图标文件到 /usr/share/icons/ 目录(后面会有用),并且编辑VSCode.desktop

cp /usr/local/VSCode-linux-x64/resources/app/resources/linux/code.png /usr/share/icons/
vim /usr/share/applications/VSCode.desktop

然后这样写:

[Desktop Entry]
Name=Visual Studio Code
Comment=Multi-platform code editor for Linux
Exec=/usr/local/VSCode-linux-x64/code
Icon=/usr/share/icons/code.png
Type=Application
StartupNotify=true
Categories=TextEditor;Development;Utility;
MimeType=text/plain;

保存退出,在开始菜单里面应该就看到VScode了。
如果想要桌面上也存在,就这样:

cp /usr/share/applications/VSCode.desktop ~/桌面位置

安装交叉编译器

通常编译工具链对编译环境有较高的要求,编译复杂的程序时,可能需要巨大的存储空间以及强大的 CPU 运算能力加快编译速度。常见的ARM 架构平台资源有限,无论是存储空间还是 CPU 运算能力,都与 PC 相去甚远,特别是对于 MCU 平台,安装编译器根本无从谈起。有了交叉编译,我们就可以在 PC 上快速编译出针对其他架构的可执行程序。

安装过程非常简单,apt安装即可:

sudo apt install gcc-arm-linux-gnueabihf

安装NFS server和挂载NFS目录

第零步:ubuntu和板子处于一个路由器内,并相互ping成功

第一步:虚拟机设置,实体机请跳过:

网络连接选择桥接并勾选复制物理网络连接状态:
在这里插入图片描述
笔记本中经常会有两个或者两个以上的网卡,根据需要进行如下设置:
在这里插入图片描述
再点击管理员模式:
在这里插入图片描述
在里面选择直通(近似可以这样理解)的网卡即可。

总之,大家的电脑和虚拟机不同,不管如何折腾或者怎么连接,目的就是虚拟机和板子之间可以互相Ping成功
ubuntu ping 板子:
在这里插入图片描述

板子ping ubuntu :
在这里插入图片描述

第二步:安装NFS server和挂载NFS目录

apt安装即可:

sudo apt-get install nfs-kernel-server

查看id:

id

记下uid(用户id) 和gid(组id),接下来要用。

安装 NFS 服务后,会新增一个/etc/exports 文件(即/etc 目录下名字为 exports 的文件),
NFS 服务根据它的配置来运行。
这里我们直接使用shell命令修改一下:

sudo echo "/home/pibot/nfs  *(rw,sync,all_squash,anonuid=????,anongid=????,no_subtree_check)" > /etc/exports
sudo exportfs -arv

别忘了把uid和gid填入问号里面去

这里面的*代表所有ip均可以访问,当然也可以指定ip,把它换成:ip/24即可
把/home/pibot/nfs换成你想要挂上去的文件夹

板子设置:

mkdir /home/root/mountnfs
mount -o vers=4 192.168.0.128:/home/pibot/nfs /home/root/mountnfs


执行过去了,就基本正常了,再去挂载目录下看

在这里插入图片描述
文件过来了,搞定!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值