Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
Linux
搭建 linux 下的编译环境,使用 uart1 双线串口作为 console
发布于 2021-03-16 20:36:10 浏览:1039
订阅该版
我平时的开发都是在 linux 下进行的,这也是我第一次学习 RISC-V 处理器。所以就想从头开始学习了。 1. 拉取代码,这次我拉取的是[greedyhao 大佬仓库的代码](https://github.com/greedyhao/ab32vg1-ab-prougen) 2. 搭建编译环境,主要就是一个编译工具链 **riscv64-unknown-elf-gcc**。[工具链的源码](https://github.com/riscv/riscv-gnu-toolchain)。整个拉取下来的文件大概有 3G 大小,编译后有效的有 1.6G ``` bash ┗─╼[~/red_misc/riscv-gnu-toolchain (master)] ▸du -sh ../riscv_tools_mul 1.6G ../riscv_tools_mul ``` 记得配置 ```./configure --enable-multilib```工具链的时候选择 --enable-multilib 使能 32bit 的支持。 其他如果拉取 submodule 慢的时候,可以更换下 submodule 的源,如果拉取完可以通过 ```git submodule``` 查看 ``` bash [~/red_misc/riscv-gnu-toolchain (master)] ▸ git submodule 57dfc2c4d51e770ed3f617e5d1456d1e2bacf3f0 qemu (v4.0.0-1854-g57dfc2c4d5) 2cb5c79dad39dd438fb0f7372ac04cf5aa2a7db7 riscv-binutils (heads/riscv-binutils-2.35) 4ea498a8e1fafeb568530d84db1880066478c86b riscv-dejagnu (heads/riscv-dejagnu-1.6) +4e3d3e40726e1b68bf52fa205c68495124ea60b8 riscv-gcc (heads/master) 63a44e5923c859e99d3a8799fa8132b49a135241 riscv-gdb (remotes/origin/fsf-gdb-10.1-with-sim) 7395b0964db9cc4dd544926414960e9a16842180 riscv-glibc (heads/riscv-glibc-2.29) 415fdd4279b85eeec9d54775ce13c5c412451e08 riscv-newlib (newlib-4.1.0) ``` 接下去就是编译了 ```make -j```,我是用服务器编译的,30 分钟左右。 编译完成后就是移动到笔记本电脑上,当时出现了一个错误,我记录了下来 ``` bash ▸ make cc applications/main.c /opt/riscv_tools/bin/../libexec/gcc/riscv64-unknown-elf/10.0.1/cc1: error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory make: *** [/home/yangyongsheng/just4github/riscv_codes/ab32vg1-ab-prougen/rt-thread/tools/rtthread.mk:100: /home/yangyongsheng/just4github/riscv_codes/ ab32vg1-ab-prougen/build/bsp/applications/main.o] Error 1 (原因是因为在编译工具链的服务器上使用的是 libmpfr.so.4,笔记上使用的是 libmpfr.so.6,将服务器对应版本的 libmpfr.so.4 复制到笔记上就可以正常运行了,如果是因为电脑上没有安装对应的库文件,那么安装对应的的库文件) ▸ sudo dnf install mpfr-devel (如果是缺少该库,安装 mpfr 库文件, 针对 fedora) ``` 3. 编译代码,第一次编译出现了 adc 的一些函数报错的问题,是因为没有链接一个 libhal.a 的库,因为是测试我取消了 adc 模块,就可以编译通过了。 ``` bash cc rt-thread/src/object.c cc rt-thread/src/scheduler.c cc rt-thread/src/signal.c cc rt-thread/src/thread.c cc rt-thread/src/timer.c cc libcpu/cpu/context_gcc.S cc libraries/hal_libraries/bmsis/source/startup.S ------------------------------------------------ link rtthread.elf ------------------------------------------------ text data bss dec hex filename 156814 0 40288 197102 301ee rtthread.elf ``` 到这里生成的只是 rtthread.bin 文件,**但是 AB32VG1 支持 dcf 文件**,这个文件怎么生成的呢? 我从 makefile.targets 文件中逐渐看出来了点眉目 ``` Makefile riscv32-elf-xmaker -b rtthread.xm riscv32-elf-xmaker -b download.xm ``` 继续跟踪,找到 rtthread.xm 文件 ``` bash ▸ cat rtthread.xm ───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ File: rtthread.xm
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ make(dcf_buf, header.bin, rtthread.bin); 2 │ save(dcf_buf, rtthread.dcf); ``` 再结合刚才的工具 **riscv32-elf-xmaker.exe** 可以猜测是 riscv32-elf-xmaker 通过读取 xm 文件生成对应的 dcf 文件。 我将 header.bin rtthread.xm rtthread.bin download.xm (这个应该不是必须的)这四个文件以及 riscv32-elf-xmaker.exe 工具复制到一台 win10 的电脑下载程序,最开始发现 uart0 也就是单线串口没有打印,目前也没有深究,因为那个是单线串口 linux 的支持不太友好,并且我自己是想用双线串口,方便在 linux 下调试的。修改了部分代码,放开了 UART1 的发送功能,修改波特率 115200, linux ckermit 调试起来目前正常。 ``` bash [I/I2C] I2C bus [i2c1] registered \ | / - RT - Thread Operating System / | \ 4.0.3 build Mar 16 2021 2006 - 2021 Copyright by rt-thread team Hello, world msh />lis list_fd list_device list_timer list_mempool list_memheap list_msgqueue list_mailbox list_mutex list_event list_sem list_thread msh />list_de list_device msh />list_device device type ref count -------- -------------------- ---------- rtc RTC 0 t4pwm Miscellaneous Device 0 sound0 Sound Device 0 wdt Miscellaneous Device 0 i2c1 I2C Bus 0 timer1 Timer Device 0 uart1 Character Device 2 uart0 Character Device 0 pin Miscellaneous Device 0 msh /> ``` 我 fork 了一份 greedyhao 大佬的仓库,[iysheng/ab32vg1-ab-prougen](https://github.com/iysheng/ab32vg1-ab-prougen)。创建了一个 RTC 分支,用来完成自己申请的 RTC 测试任务,其中有我自己记录的代码注释 :smile:。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
iysheng
这家伙很懒,什么也没写!
文章
9
回答
15
被采纳
4
关注TA
发私信
相关文章
1
RT-Thread Studio 跨平台
2
Linux下Scons编译工程遇到宏定义的问题,如何解决?
3
Linux下开发rtthread,求资料
4
qemu-vexpress-a9运行 qemu-dbg.sh 提示错误
5
ART-Pi SDK在Linux环境下编译不通过问题
6
虚拟串口在Linux下的使用问题
7
linux命令行通过串口发送finsh指令无法执行
8
怎么移植linux上的软件
9
linux下使用RT-Thread Studio插件如何进行stlink下载
10
代码在ubuntu上编译不能运行
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
文件系统
DMA
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
ota在线升级
WIZnet_W5500
UART
flash
packages_软件包
cubemx
PWM
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
中断
flashDB
socket
Debug
GD32
编译报错
msh
keil_MDK
at_device
rt_mq_消息队列_msg_queue
ulog
C++_cpp
SFUD
本月问答贡献
出出啊
1512
个答案
341
次被采纳
小小李sunny
1437
个答案
289
次被采纳
张世争
774
个答案
167
次被采纳
crystal266
546
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部