一. 小熊派bearpi-micro 移植 Linux 内核 完全手册 (环境搭建篇)

前言

最近过年放假回家 , 想大过年的无所事事突发奇想自己搞一套智能家居玩玩 , 想来想去决定以linux 作为中枢上Home Assistant 但是开发板留在了宿舍没带回来, 手上只有一块bearpi-micro . 但是看了看官方教程 只提供了编译好的固件 ,最底层也是基于HMOS的固件 ,然鹅er 鸿蒙os 又是一块难啃的骨头,所以决定bearpi-micro 移植上 linux内核 作为中枢网关了 ,

天不随人愿, 网上关于bearpi-micro的资料简直少得可怜(难道是我搜索方式不对?) 所以决定参考 韦东山老师的 100ask_stm32mp157pro开发板的教程来 尝试自己移植到bearpi-micro上(一步一个坑) 源代码后续会上传到gitee上 (移植好的) ,本教程也是记录一下操作方法,汇总一下,同时供大家参考学习一下.

日期版本备注作者
2024年2月14日1.0.0起稿蓝羽玄机

1. 物料准备

硬件

  • 16G以上的SD卡 (作为启动盘用 要求皮实耐用的)
  • bearpi-micro 开发板
  • TF读卡器
  • Type-C口 USB数据线

软件

2. 环境搭建

参考 嵌入式Linux应用开发完全手册V5.1_STM32MP157_Pro开发板.pdf 第二篇 第一章 安装VMware 并导入ubuntu18.04 的系统镜像 , 写的很详细 这里不过多赘述了.

因为我的电脑 总是VMware 开GUI会卡死 但是后台确实还在执行 所以我直接将VMware 再后台运行 使用WindTerm 通过 ssh 执行终端命

因为开发包教程中 通过 repo 对100ASK_STM32MP157_Pro开发板的 BSP 进行统一管理,以防后续如果改版 再使用本教程可能会出现错误 所以我先git一份 上传到gitee上 在想自己挑战移植的同志们也可以 **嵌入式Linux应用开发完全手册V5.1_STM32MP157_Pro开发板.pdf 第二章 第六篇 ** 来拉取开发包提供的工程


交叉编译工具链

交叉编译的概念一般用于嵌入式系统开发。
使用交叉编译的主要原因,是嵌入式系统中配置较低,资源过少,远不及PC的编译效率。
以笔者为例,笔者的毕业设计是把在ARM上运行一个搭建一个小型监控系统,所以就需要在ARM上配置OpenCV。一方面,笔者的ARM是Cortex-A9的四核1.0GHz的芯片(且已经算比较高的配置),但编译速度依旧远远不如笔者的PC机(i7处理器,8核3.6GHz)。如果在ARM上编译OpenCV,编译过程中生成的中间文件可能大于ARM存储容量不说,且编译速度也远不如本地编译。另一方面,PC机的CPU架构是x86型的,ARM的CPU架构是ARM型的,所以这时候就需要用交叉编译器(此处即为ARM的编译器)编译程序代码,然后移植到ARM平台运行。所以这就是交叉编译的意义所在。
一般所说的工具链,指的是本地平台自己的工具链。而用于交叉编译的工具链,就是交叉工具链。交叉工具链中,gcc编译器、ld链接器以及其他的相关工具,都是用来跨平台交叉编译的。
交叉工具链与本地工具链类似,也有交叉编译版本的gcc, ld, as等工具,与本地工具链两两对应。交叉工具链中最重要的工具还是编译器gcc,所以我们也经常把交叉工具链简称为交叉编译器,即严格意义上来讲,交叉编译器指的是交叉编译版本的gcc,但为了叫法上的方便,我们平常说的交叉编译,其实指的都是交叉工具链。

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

  1. 修改~/.bashrc 是环境变量每次自动设置
sudo nano ~/.bashrc

在尾部添加以下代码

export ARCH=arm 
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- 
export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

PATH环境变量上的路径 要与你的ubuntu中项目toolchain下 交叉编译工具链的位置相匹配

完成后使用以下命令使其生效

sudo source ~/.bashrc

使用以下命令验证交叉编译工具链是否生效

arm-buildroot-linux-gnueabihf-gcc -v

结果如下图所示
在这里插入图片描述

3. SD卡准备

拿出准备好的SD卡 使用TF读卡器 连接电脑
在这里插入图片描述

如果此时开启虚拟机 先让SD卡 连接Windows
在这里插入图片描述

然后打开计算机硬盘管理 清空SD卡的所有卷
在这里插入图片描述

然后再虚拟机中将SD卡 连接至虚拟机
在这里插入图片描述

此时输入以下命令 查看SD卡 名称

sudo ls /dev/sdb*

使用 sgdisk查看分区信息

sudo sgdisk -p /dev/sdb

在这里插入图片描述

可以看到 此时SD卡中无分区 此时 使用以下命令 给SD卡分区

sudo sgdisk --resize-table=128 -a 1 \
     -n 1:34:545      -c 1:fsbl1 \
     -n 2:546:1057    -c 2:fsbl2 \
     -n 3:1058:5153   -c 3:ssbl \
     -n 4:5154:136225 -c 4:bootfs \
     -n 5:136226:     -c 5:rootfs \
     -A 4:set:2 \
     -p /dev/sdb  -g

具体含义可参考以下列表理解

参数含义
-A查看或设置分区属性
-a设置对齐值
–resize-table设置分区数限制
-p显示分区表
-gmbr转换gpt
-c分区名称 x:y 分区编号:分区名称
-n分区区域 x:y:z 创建一个编号 x 的新分区,从 y扇区 开始,到 z扇区 结束

运行成功后 可以看到 返回结果为5个分区
在这里插入图片描述

到此时, SD卡算是设置好了. 接下来就是记住烧录的命令 X 为分区编号 例如 烧录fsbl1 就是 =/dev/sdb1

sudo dd if=文件地址 of=/dev/sdbX conv=fdatasync

如果使用其他方式格式化了SD卡 或 其中有一个或多个分区

如图所示 我使用了SDCard Formatter 工具格式化了SD卡 (自己摸索的操作 有更好的方法的话请赐教) 那么可以先将分区清除 再创建分区 在这里插入图片描述
在这里插入图片描述

操作如下 先输入以下命令 创建分区表

sudo sgdisk -og /dev/sdb

在这里插入图片描述

然后暴力一点 直接清除所有分区

sudo sgdisk -z /dev/sdb

当然你也可以温柔一点 一个分区一个分区的删除

sudo sgdisk -d 分区编号 /dev/sdb

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

再通过查看分区命令 可以发现 一样的清楚了所有分区

sudo sgdisk -p /dev/sdb

接下来的操作 跳转到这一步

sudo sgdisk --resize-table=128 -a 1 \
     -n 1:2048:2559      -c 1:fsbl1 \
     -n 2:2560:3071    -c 2:fsbl2 \
     -n 3:3072:7167   -c 3:ssbl \
     -n 4:7168:138239 -c 4:bootfs \
     -n 5:138240:     -c 5:rootfs \
     -A 4:set:2 \
     -p /dev/sdb  -g

注意事项

因为linux 特殊机制,将SD卡插入但还未挂载好的时候就写入文件的话 可能会显示已经写入成功 但实际并未写入的这种现象在这里插入图片描述

正常的挂在应该如上述所示

正常情况下,我们将SD卡通过虚拟机接入Ubuntu系统并用ls命令查看/dev下的设备,需要指明的是,sda为虚拟硬盘,为虚拟机安装系统时所默认创建的;sdb为我从外部通过虚拟机接入Ubuntu的SD卡设备。从图中我可以看到,它们的文件类型均为’b’,这个’b’代表了块设备,而linux中块设备包括但不限于:硬盘/软盘/CD-ROM驱动器/闪存等一系列的存储设备,故SD卡自然而然的也属于块设备的一种。故当SD卡接入Ubuntu后,此处显示为‘b’说明SD卡被正常挂载,且其下有一个分区叫做sdb1。


作者:21Galaxy
链接:https://juejin.cn/post/7186603236411834429
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

不正常的挂载情况 ,通过ls命令查看/dev下的设备,可以看到/dev下多出了一个名为/dev/sdb的设备,且其文件类型为‘-’,代表其为普通文件,且Ubuntu已经很醒目地将其去掉了高亮颜色。说明此文件并非一个块文件。 在这里插入图片描述

那么为什么会产生这样一个奇怪的/dev/sdb的文件呢?原因在于先前在SD卡没有接入Ubuntu的时,就执行了dd指令,从而生成了假的设备盘符遗留在系统中。

解决办法时把U盘先拔出 ,此时执行ls命令 还是会看到有刚才的/dev/sdb的设备 这个就是缓存文件在这里插入图片描述

此时执行下述命令 来删除两个缓存文件 X根据你的缓存文件名称来删除

sudo rm /dev/sdbX

再次插入U盘会发现 所有卷设备都已经显示高亮 同时前面带有b字母 证明几个设备 证明设备没问题 此时写入文件便可以成功写到SD卡在这里插入图片描述

4. 总结

至此,环境搭建便已经完成了.

此篇记录 涉及到linux 的基础操作 包括dd/sgdisk 等磁盘管理工具 与 cd ls 等基础命令. 同时学习关于 VMware 相关的虚拟机操作 与ssh连接工具 .

后续笔记正在赶来的路上…

如果觉得我的操作或者步骤有问题 欢迎批评指正共同进步 .

同样如果觉得写的不错 欢迎进行打赏.一分也是爱. 也可以加我微信交流.

请添加图片描述

  • 31
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽玄机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值