1.文章目的
2.树莓派4B的硬件配置
3.第一个基础工程构建
3.1 环境准备
3.2 源代码下载
3.3 代码编译与程序下载
3.4 树莓派硬件链接
4.优化调试手段
4.1 修改sd卡文件中的config.txt文件
4.2 修改网络环境
4.3 修改代码的链接地址
5.小结
1.文章目的
树莓派4作为一款学习嵌入式arm开发的开发板,是非常不错的选择。嵌入式开发往往需要的不仅仅是理论知识,还需要动手操作,然后实际体验效果。由于目前开发板要么资料太少,要么板子太贵,或者可玩性太低,所以嵌入式的入门和深入一直都是非常困难的问题。我写树莓派4裸机基础教程、树莓派4驱动进阶、树莓派4的RTOS这一些列的文章,也是希望借此机会,和大家分享一下嵌入式开发过程的方方面面,也希望对学习嵌入式感兴趣的人在阅读完成这些文章中会有所收获。由于树莓派4的外设,相对于前代的树莓派2、树莓派3等标准许多,完全可以作为学习嵌入式,学习arm编程的不错选择。所谓万变不离其宗,学会树莓派4的嵌入式开发,以后做其他的芯片的底层开发时,也是可以借鉴这种思想的。
写这些东西的目的全凭自己的兴趣爱好,在工作之余培养自己的文档写作能力与专业技能,如果有涉及到不正确的观点和知识点的地方还请多多指教。
2.树莓派4B的硬件配置
树莓派4b的性能非常强,运行Android和win10也毫无压力。性能强大,但是价格却非常的低,是一款学习嵌入式开发、学习arm开发的非常不错的开发板。
1.5GHz 4核心64位 ARM Cortex-A72 CPU (~3×倍性能)
全吞吐量千兆以太网
双频 802.11ac 无线网络
蓝牙 5.0
双显示器支持,分辨率高达 4K
VideoCore VI 显卡,支持 OpenGL ES 3.x
HEVC 视频 4Kp60 硬解码
完全兼容早期的树莓派产品
3.第一个基础工程构建
嵌入式代码编译开发一般是两种,一种是通过IDE进行编译、下载、调试。这种开发的方式比较简单,对环境配置的要求很低,只需要安装IDE需要的环境即可。这种开发方式在开发单片机、中低端性能的芯片比较常见。另外一种就是在命令行中输入相关的命令,需要自己手动的去写编译脚本。这种常见的就是在Linux的开发过程中。
树莓派程序的开发过程一般都没有IDE,都是直接用GCC,所以我在进行工程构建的时候,也会采用GCC在控制台输入的方式进行。工程构建就需要自己解决了。目前常用的自动化编译工具就是Makefile。由于当前的第一个项目的工程比较容易,所以当前可用采用Makefile进行项目工程的构建。
3.1 环境准备
在不同的平台上进行工程构建的时候,首先需要准备下面的环境:
1.arm交叉编译工具链
2.可用执行makefile的工具
交叉编译工具链arm-none-eabi-gcc-5.4.1可以在官网上进行下载,也可以到网盘中下载:
链接:https://pan.baidu.com/s/1ad3d-pl4YbpgYrxKg6mX9g
提取码:f3cm
上述网盘中的gcc只适用于windows,如果是其他的系统,请自行下载arm的交叉编译工具链。
如果要在windows上使用make命令,可以下载msys2,上面集成了make的环境。
然后将交叉编译工具链加入到系统的环境变量中,同时打开msys64文件夹,修改msys2_shell.cmd
双击msys2_shell.cmd,打开窗口,确保输入arm然后按下tab键可以看到如下的画面
这样系统环境就准备完成了。
3.2 源代码下载
源代码工程已经在GitHub存在了,相关源码可以在如下地址中找到:
https://github.com/bigmagic123/raspi4-bare-metal.git
在arm/1.compilation_environment中可以看到相关的文件列表。
文件名 | 说明 |
---|---|
link.ld | 链接文件 |
main.c | 函数入口 |
Makefile | 编译规则文件 |
start.S | 初始化汇编代码 |
uart.c | 串口相关的代码 |
uart.h | 串口相关的头文件 |
该代码的功能是启动跳转到c代码去执行,然后串口输出hello world程序。
3.3 代码编译与程序下载
上面两个步骤完成之后,在MSYS可以进入到工程目录,输入make直接编译即可。
可以看到生成了kernel7.img固件。该固件可以放到板子上运行。
3.4 树莓派硬件链接
树莓派4需要准备一张空的SD卡、一个串口线输出信息、一条TYPEC线供电。
首先需要将工程目录的sd_boot下面的文件放到空的SD卡目录中。然后将编译好的kernel7.img放到SD卡中即可。
接着将串口线连接到树莓派上。
接着打开串口,给开发板上电,可以看到串口的输出信息:
Helloworld!
此时一个简单的裸机程序就执行起来了。
4.优化调试手段
上述过程已经搭建完成环境,并且可以看到串口输出信息了。但是由于每次编译固件后,需要将固件放到sd卡中去执行,这样操作比较的繁琐,不适合学习嵌入式开发。所以可以通过树莓派的uboot自动去tftp服务器中获取代码。具体的步骤如下:
4.1 修改sd卡文件中的config.txt文件
将config.txt中的文件改为如下:
enable_uart=1 arm_64bit=0 kernel_addr=0x8000 kernel=u-boot32.bin core_freq=250
其实就是将kernel=kernel7.img改为kernel=u-boot32.bin。直接启动uboot。
4.2 修改网络环境
如果要开发板从tftp服务器上获取代码,可以将开发板设置的与pc机服务器在同一网段内。将网线插上路由器,开发板可以通过dhcp获取ip地址。
U-Boot2020.07-rc1-g627e7ce(May112020-1954+0800) DRAM:1.1GiB RPI4ModelB(0xb03112) MMC:emmc2@7e340000:0,mmcnr@7e300000:1 LoadingEnvironmentfromFAT...OK In:serial Out:serial Err:serial Net: Warning:genet@7d580000MACaddressesdon'tmatch: AddressinDTisdc32c1:79 Addressinenvironmentisdc3222:50 eth0:genet@7d580000 Hitanykeytostopautoboot:0 U-Boot>
按照如下步骤进行:
1.插上网线到路由器
2.设置环境变量
setenvbootcmd"dhcp0x00200000192.168.12.137:kernel7.img;dcacheflush;go0x00200000" saveenv
需要注意的是192.168.12.137为自己的电脑的ip地址。
3.电脑开启TFTP服务器
注意:
如果是开发板直连电脑的网线,这样设置是无效的,因为pc机上一般不支持dhcp服务器。必须设置静态ip地址。
然后开发板也需要给定一个ip地址。可以设置一个环境如下:
setenvipaddr10.1.1.100 saveenv reset
其中10.1.1.100是开发板的ip地址,与服务器是在同一网段。
setenvbootcmd"tftp0x0020000010.1.1.88:kernel7.img;dcacheflush;go0x00200000" saveenv
4.3 修改代码的链接地址
由于uboot的启动地址与裸机代码的地址不应该在一个地方,uboot的启动地址为0x8000,而裸机代码的地址现改为0x200000。
将该地址进行设置即可。
重新编译代码,开发板上电即可。可以看到串口打印出如下的信息。
这样每次开发板上电后,都会从tftp服务器上去获取代码执行。如果此时给树莓派的供电线加上一个电源开关,这样这样就能够非常方便高效的调试代码了。
5.小结
本文主要介绍树莓派裸机开发的步骤。嵌入式开发过程中,环境搭建往往十分的重要,一个好的开发环境,一个高效的验证思路可以大大的节省开发时间。所以说,工欲善其事、必先利其器。想要学好嵌入式开发,学会利用各种工作,让自己的工作效率加倍十分的重要。通过上述的文章描述,嵌入式的前期的基本环境可以搭建好,同时也可以理解系统的启动过程。我觉得,万事开头难,只有迈出了第一步,其实写起代码也就没什么太大的难度了。
- END -
原文标题:树莓派4裸机基础教程:环境搭建
文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
-
树莓派
+关注
关注
116文章
1707浏览量
105627 -
环境搭建
+关注
关注
0文章
53浏览量
9055
原文标题:树莓派4裸机基础教程:环境搭建
文章出处:【微信号:Embeded_IoT,微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论