我平时的开发都是在 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相关推荐

  1. linux编译运行uart,嵌入式Linux裸机开发(七)——UART串口通信

    嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTE ...

  2. 基于WSL2和Clion搭建Win下C开发环境

    系列文章目录 一.基于WSL2和Clion搭建Win下C开发环境 二.make.makeFile.CMake.CMakeLists的使用 三.全面.详细.通俗易懂的C语言语法和标准库 文章目录 系列文 ...

  3. linux如何运行java程序,Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...

  4. linux中运行.pro文件,Linux下pro*c运行配置

    在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...

  5. linux怎么运行gcc,在Linux下使用gcc运行C语言程序

    标签:终端   工具   gcc   程序   分区   编译   mod   没有   保存 Linux下使用最广泛的C/C 编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是 ...

  6. linux程序运行段错误,Linux下段错误调试技巧

    更新于2019.04.17 我们写的程序, 尤其是C/C++程序有时候会段错误, 而且往往发生在部署环境而非调试环境, 对问题定位带来很大困难. 这时一般有两种方法来解决问题, 一种是生成core d ...

  7. linux系统运行flash3d,在Linux上运行STM32,快来试试!

    原标题:在Linux上运行STM32,快来试试! STM32MP1多核微处理器,带有650Mhz主频的cortex-A7双核以及一个主频为209Mhz的cortex-M4核,即片内拥有三核.很多STM ...

  8. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

  9. c#如何在linux上运行程序,在Linux上运行C#

    众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...

最新文章

  1. shiro密码正确也会匹配错误_Shiro学习之——Shiro与Web集成
  2. JS自定义字符串格式化函数
  3. php生产任务,php生产实用技能之计划任务(视频讲解)
  4. QImage、 QPixmap、 QBitmap、 QPicture区别
  5. 在webstorm中使用Jade for Meteor,模板template语法“+templateName”不能使用的解决方案...
  6. 在 Tomcat 中部署 Java Web 程序 ( jar cvf *.war */. ) war 包
  7. jmeter自动生成测试报告
  8. Linux下互斥量加锁与解锁操作的C代码实现
  9. 使用QtXlsx读写Excel文件
  10. vue 播放.aac格式的音频文件
  11. jbutton如何实现点击_Java Swing JButton按钮的实现示例
  12. Dialog确认按钮不dismiss
  13. 为什么我不能像在Linux和OS X上那样在Windows上更改使用中的文件?
  14. [emacs]man mode
  15. 考研还是就业?来自大三计算机党的疑惑
  16. Altium Designer14安装教程及注意事项
  17. Linux下载并安装rabbitmq-server-3.6.5-1.noarch.rpm
  18. ​Hello Qt(四十七)——QtQuick基础​
  19. 计算机动画的应用分析,自然用户界面研究与计算机动画
  20. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

热门文章

  1. 对抗样本之MIM原理coding
  2. CSS----其他新增属性
  3. Cocos Store Q3资源推荐
  4. 学生信息注册表模板html,学生信息管理系统模板(静态页面)
  5. 十四、此次泡沫形成和破裂的原因
  6. [附源码]计算机毕业设计JAVA暖暖猫窝系统
  7. 第十三篇、基于Arduino uno,获取薄膜压力传感器的值——结果导向
  8. 编译c语言动态库,使用gcc、g++编译C/C++源程序,静态库和动态库创建方式
  9. Microsoft Edge网页视频播放绿屏解决方法
  10. Android 关闭硬件加速功能