linux编译运行uart,搭建 linux 下的编译环境,使用 uart1 双线串口作为 console

我平时的开发都是在 linux 下进行的,这也是我第一次学习 RISC-V 处理器。所以就想从头开始学习了。搭建编译环境,主要就是一个编译工具链 riscv64-unknown-elf-gcc。工具链的源码。整个拉取下来的文件大概有 3G 大小,编译后有效的有 1.6G┗─╼[~/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 查看[~/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 分钟左右。

编译完成后就是移动到笔记本电脑上,当时出现了一个错误,我记录了下来▸ 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)编译代码,第一次编译出现了 adc 的一些函数报错的问题,是因为没有链接一个 libhal.a 的库,因为是测试我取消了 adc 模块,就可以编译通过了。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 文件中逐渐看出来了点眉目riscv32-elf-xmaker -b rtthread.xm

riscv32-elf-xmaker -b download.xm

继续跟踪,找到 rtthread.xm 文件▸ 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 调试起来目前正常。[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。创建了一个 RTC 分支,用来完成自己申请的 RTC 测试任务,其中有我自己记录的代码注释 :smile:。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值