目录
思路简介
交叉编译工具链下载和安装
安装msys2
下载msys2
配置pacman
更新软件包数据
手动安装make
添加环境变量
编译
在命令行中编译龙芯1c库(或者裸机程序)
使用make编译
在eclipse中编译龙芯1c库(或裸机程序)
eclipse的下载和安装
新建Makefile项目
把龙芯1c库的源码加到工程中
在eclipse中编译(构建)
在eclipse中clean(清理)编译生成的目标文件
烧写固件(bin文件)到板子上
在线仿真工具——EJTAG
用ejtag单步调试白菜板
开源的EJTAG
网上有很多用eclipse+msys2实现windows上开发环境的,本文也采用eclipse+msys2这种方案。
开发环境包括,代码编辑,代码编译,仿真等。其中,代码编辑不是问题,记事本都可以编辑,一般常用eclipse或者sourceinsight编辑代码。仿真暂不考虑。现在重点放在代码编译上。
虽然本文重点讨论龙芯1C300B,这里有必要提一下龙芯1C101。听说龙芯官方有龙芯1C101在windows上开发的全套工具(包括基于eclipse的IDE和基于ejtag的仿真器)。有网友在淘宝买了一个几十元(好像是七八十元,具体记不清了)的openOCD,可以替代官方的ejtag作为仿真器(为什么要替换官方的呢?因为贵,呵呵!)。
要想在windows上编译龙芯1c的代码,至少需要windows上的交叉编译工具链,然后还需要make。交叉编译工具链采用网友“老鼠”提供的,据说是君正的交叉编译工具链,反君正和龙芯同属mips系列,工具链可以通用也是正常的,经过初步测试可用,如有不能用的地方,可以在虚拟机里面用linux下的龙芯官方提供的交叉编译工具链编译。
IDE使用eclipse。由于龙芯1c库中已经有Makefile,所以只需要在eclipse中新建一个“Makefile项目”,然后工具链选择“MinGW GCC”即可。
本文以在windows上下编译基于龙芯1c库的裸机程序为例。分别讲解交叉编译器的安装,make的安装,eclipse的安装、在命令行下编译和eclipse下编译,以及烧写固件bin文件。
龙芯1c库的源码的下载地址https://gitee.com/caogos/OpenLoongsonLib1c
windows上的交叉编译工具链,eclipse,以及CH341A驱动和烧写软件的下载地址https://pan.baidu.com/s/1J9c4e2Q6OeYEgTM2rHPcfA
找到“mips-mingw32.zip”,解压后,剪切到目录“D:\Program Files (x86)”内(也可以其它目录,根据自己喜好),然后进入其中的bin目录,如下
将上图中的目录添加到环境变量中,如下
在任意一个文件夹内空白处,按住shift键,右击鼠标,在弹出的下拉列表中,选择“在此处打开命令窗口”,然后运行命令“mips-linux-gnu-gcc -v”测试一下,如果能够正确打印出版本号,则说明安装成功(环境变量添加成功),如下
因为龙芯1c库使用Makefile来管理源码文件,所以需要使用make来执行Makefile,进而实现编译。
下载地址是http://mirrors.ustc.edu.cn/msys2/distrib/ 或者官网http://www.msys2.org/
选择一个即可。如果是32位的windows操作系统,则选i686的,如果是64位的windows操作系统,则选x86_64的。
参考https://mirrors.tuna.tsinghua.edu.cn/help/msys2/修改配置文件
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后执行 pacman -Sy 刷新软件包数据即可。
我把msys2安装在D盘的,这三个配置所在的目录是“D:\msys64\etc\pacman.d”,如下修改
双击msys2.exe
然后执行 pacman -Sy 刷新软件包数据即可,如下图
执行命令“pacman -S make”安装make,如下
安装好后,在目录“D:\msys64\usr\bin”下有make.exe文件,如下
把make.exe所在目录“D:\msys64\usr\bin”添加到操作系统的环境变量path中,如下
然后再命令窗口中运行一下,如果执行“make -v”能够正确提示版本号,则说明安装成功
好,到此,可以进行编译了。如果已经安装好了make,则不需要采用备用方案,不需要再安装mingw。直接跳到编译那一章节。
除了make之外,Makefile中可能还用到了 rm 和 cp 命令,这两个命令属于常用命令,msys2安装好后,默认就有,不需要像make那样手动安装。在同一个目录下,不相信的可以自己确认一下。当然如果发现没有,也可以参考make的安装方式,手动安装。
执行命令“rm --help”,看看是否能够执行成功
说明能够正确执行rm命令
除了rm命令外,其它命令应该也可以用了。比如cp等。
下载龙芯1c库,然后进入src目录,如下
在目录内空白处,按住shift的同时,单击右键,选择“在此处打开命令窗口”,就可以打开命令窗口,如下
此时,已经编译完成,生成了bin文件,如下图所示
这个bin文件就是需要烧写到板子上去的。至于如何烧写,在后面讲解。
执行make clean后,如下图
再看看目录内的bin文件,是不是已经被删除了。
这里以4.6.3为例,可以到eclipse官网下载,也可以到我的百度网盘下(前面有网盘链接),具体的版本如下
龙芯1c库代码中已经包含了Makefile文件,这里可以直接使用。即新建一个空的基于Makefile的项目。如下图
请记住此时选择的路径“D:\TDDownload\eclipse_workplace\test”(如果你愿意,可以改为任意路径),后面会用到。项目建好后,如下
默认有几个include,反正我们不会用到它,这里直接忽略它的存在,即可。
再去项目文件夹“D:\TDDownload\eclipse_workplace\test”看看,如下
从龙芯1c库中把(src目录内的)源码拷贝到eclipse项目所在文件夹内,如下
然后,在eclipse界面中,按F5刷新一下,eclipse会自动扫描项目文件夹,自动将新拷贝的源文件加入项目中,此时的eclipse截图如下
1c库中的源码为utf8格式的,eclipse也需要修改为utf8的,否则可能会出现乱码。单击菜单“window”下的“preferences”,然后按照下图设置
然后打开源码目录app下的main.c看看,如下
源码中已经有一些测试用例,常见的每个功能几乎至少都有一个测试用例,需要使用那个,就把注释取消。然后编译,烧写到板子上即可看到效果。
选择菜单“project”下的“build project”即可编译,或者使用下图箭头所指的快键按钮也可以编译。
编译后,eclipse下的console窗口会有如下打印。
注意,此时左边的导航栏中已经出现了bin文件了,console窗口中的打印和命令行下的打印是完全一样的。可以去项目文件夹看看,是不是已经生成了bin文件,如下
如果需要把bin文件清理掉,可以使用菜单“project”下的菜单“clean...”,如下图所示
eclipse的console窗口的打印
可以到文件夹中看看bin文件是否被删掉了。
这里以白菜板为例。目前白菜板是通过CH341A把bin文件烧写到板子上的。通过如下软件烧写
首先,单击“打开”按钮,把bin文件打开;如果白菜板已经和电脑连通了,那么按钮“自动”会是可用的,目前是灰色的,因为我没连白菜板。当连上后,单击按钮“自动”即可。
CH341A的驱动和烧写软件的下载地址在前文已经给出。
如果已经用usb将白菜板接到了电脑上,可是按钮“自动”仍然是灰色的。这时候,请先把白菜板断电(拔掉usb),再拨动白菜板右上角的红色的拨码开关,拨到另外一边,再上电(接上usb)。此时按钮“自动”就应该可以用了。
白菜板上的usb有三个功能:供电,USB转TTL串口,烧写固件。
其中USB转TTL串口和烧写固件是板子上芯片CH341A的两个功能,两种工作模式,一个时刻只能处于一种模式。也就是说CH341A要么用作串口,用于调试,打印信息;要么用来烧写固件bin文件。这两种模式通过白菜板右上角的红色的拨码开关来选择。
据说,龙芯官方的ejtag可以用来单步调试白菜板,但目前(2019年9月)还只能是命令行下,不过可以在windows的命令行下。下一步就等那位大佬能把eclipse和ejtag结合起来,这样就可以在eclipse单步调试白菜板。
貌似白菜板还有个bug,要想使用ejtag,需要先给白菜板上电,然后再给ejtag上电。虽然这个有点麻烦,但至少能用ejtag调试了。
据说,龙芯官方的某博把ejtag的固件放出来了,然后有龙芯爱好者依据官方的ejtag抄板了,并把这些资料开放出来了,我备份到了我的gitee里面。
https://gitee.com/caogos/loongson_ejtag
其中,ejtag的原理图和PCB在立创EDA上画的,也保存立创EDA上的,可以直接在立创EDA上搜”龙芯 ejtag“,我也备份到了我的立创EDA账户下,具体信息在gitee的readme里面有说明。
另一篇文章讲了《手焊白菜板》的焊接技术,如果能手焊白菜板了,那么再手焊一个EJTAG。
感谢网友“老鼠”提供交叉编译工具链;
感谢网友“小子”提供eclipse编译1c库的方法;
感谢网友孙老师提供mingw32的安装方法。
感谢阅读!