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:。
linux编译运行uart,搭建 linux 下的编译环境,使用 uart1 双线串口作为 console相关推荐
- linux编译运行uart,嵌入式Linux裸机开发(七)——UART串口通信
嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTE ...
- 基于WSL2和Clion搭建Win下C开发环境
系列文章目录 一.基于WSL2和Clion搭建Win下C开发环境 二.make.makeFile.CMake.CMakeLists的使用 三.全面.详细.通俗易懂的C语言语法和标准库 文章目录 系列文 ...
- linux如何运行java程序,Linux环境下运行简单java程序
一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...
- linux中运行.pro文件,Linux下pro*c运行配置
在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...
- linux怎么运行gcc,在Linux下使用gcc运行C语言程序
标签:终端 工具 gcc 程序 分区 编译 mod 没有 保存 Linux下使用最广泛的C/C 编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是 ...
- linux程序运行段错误,Linux下段错误调试技巧
更新于2019.04.17 我们写的程序, 尤其是C/C++程序有时候会段错误, 而且往往发生在部署环境而非调试环境, 对问题定位带来很大困难. 这时一般有两种方法来解决问题, 一种是生成core d ...
- linux系统运行flash3d,在Linux上运行STM32,快来试试!
原标题:在Linux上运行STM32,快来试试! STM32MP1多核微处理器,带有650Mhz主频的cortex-A7双核以及一个主频为209Mhz的cortex-M4核,即片内拥有三核.很多STM ...
- linux里运行windows,在Linux上运行Windows应用程序
当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net 网友分享于:2015- ...
- c#如何在linux上运行程序,在Linux上运行C#
众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...
最新文章
- shiro密码正确也会匹配错误_Shiro学习之——Shiro与Web集成
- JS自定义字符串格式化函数
- php生产任务,php生产实用技能之计划任务(视频讲解)
- QImage、 QPixmap、 QBitmap、 QPicture区别
- 在webstorm中使用Jade for Meteor,模板template语法“+templateName”不能使用的解决方案...
- 在 Tomcat 中部署 Java Web 程序 ( jar cvf *.war */. ) war 包
- jmeter自动生成测试报告
- Linux下互斥量加锁与解锁操作的C代码实现
- 使用QtXlsx读写Excel文件
- vue 播放.aac格式的音频文件
- jbutton如何实现点击_Java Swing JButton按钮的实现示例
- Dialog确认按钮不dismiss
- 为什么我不能像在Linux和OS X上那样在Windows上更改使用中的文件?
- [emacs]man mode
- 考研还是就业?来自大三计算机党的疑惑
- Altium Designer14安装教程及注意事项
- Linux下载并安装rabbitmq-server-3.6.5-1.noarch.rpm
- ​Hello Qt(四十七)——QtQuick基础​
- 计算机动画的应用分析,自然用户界面研究与计算机动画
- 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数