目录
1.前言
首先,感谢龙芯团队的耐心指导以及他们的开源精神。
最近在工作,接到一个任务:适配龙芯国产化芯片的BIOS工作。目前还在学习PMON的编程,在配置的时候就遇到了很多问题。目前已经搭载完了一版Pmon编译环境。下面将讲解我是如何配置的。
官方参考网站: PMON编译方法-龙芯开源社区: (如有需要请联系购买芯片的对接市场人员。)
2.运行平台
本次编译环境依托Ubuntu 18.04.4 STL和Ubuntu 20.04.1 STL版本,目前使用22.04.1版本。Ubuntu20与Ubunut18区别在python环境,Ubuntu20默认使用python,所以我在编译前修改了编译脚本。在Ubuntu18配置环境前,我已经按照官网配置教程在Ubuntu16 i386_32位版本中配置成功。修改为Ubuntu18的原因是目前新的pmon支持设备树挂载使用的dtc工具需要使用64位运行环境。
3.依赖组件
在Ubunt18系统下需要安装以下运行支持组件:
名称 | 指令 |
---|---|
g++ -multilib | sudo apt-get install g++ -multilib |
libncurses5:i386 | sudo apt-get install libncurses5:i386 |
libstdc++5:i386 | sudo apt-get install libstdc++5:i386 |
libstdc++6:i386 | sudo apt-get install libstdc++6:i386 |
libz.so.1 | sudo apt-get install lib32z1 |
flex | sudo apt-get install flex |
bison | sudo apt-get install bison |
xutils-dev | sudo apt-get install xutils-dev |
python2.7 | sudo apt-get install python2.7 |
配置好的bash执行脚本:
sudo apt-get install g++-multilib libncurses5:i386 libstdc++5:i386 libstdc++6:i386 lib32z1 flex bison xutils-dev python2.7
实验电脑安装结果如下:
注:如果是刚配置成功的Ubuntu系统,当以上组件安装成功后还需要下载git,make插件。
4.安装与配置安装专用GCC编译器
4.1下载GCC编译器
根据官网教程描述,需要使用龙芯提供的GCC编译器。专用GCC4.0下载:gcc-4.4.0-pmon.tgz
龙芯官网已经改版,已经对开源项目进行了整合。可在龙芯开源GNU下载所需要的编译链接工具。下文中还是以mips-gcc-4.4.0进行搭建描述。
4.2解压GCC编译器
将下载好的gcc-4.4.0-pmon.tgz压缩包存放在任意位置。在压缩包存储的位置打开控制台,输入如下bash指令:
sudo mkdir -p /usr/local/comp/mips-elf/
sudo tar -zxvf gcc-4.4.0-pmon.tgz -C /usr/local/comp/mips-elf/
4.3配置系统运行
输入如下Bash指令进入Bashrc配置文件。
sudo gedit ~/.bashrc
在文件末尾添加三行环境配置:
export LD_LIBRARY_PATH=/usr/local/comp/mips-elf/gcc-4.4.0-pmon/lib:
export CROSS_COMPILE=mipsel-linux-
export PATH=/usr/local/comp/mips-elf/gcc-4.4.0-pmon/bin/:$PATH
环境变量生效:
source ~/.bashrc
保存后,关闭编辑器,关闭所有的控制台。
GCC编译器配置完成。
5.编译龙芯PMON执行文件
5.1下载PMON源码
龙芯官网使用Git进行版本控制,因此需要操作系统安装git组件。
打开控制台,在任意位置(不需要Root权限)的位置下载PMON源码。
git clone http://cgit.loongnix.org/pmon/pmon-loongson3.git
下载完毕后需要安装git tools插件
5.2 编译并配置git tools插件
进入pmon-loongson3文件夹,打开在文件夹中控制台。输入以下指令:
cd tools/pmoncfg
make
#等待编译完成
sudo cp pmoncfg /usr/bin
5.3 针对Ubuntu20的适配
Ubuntu20 中默认环境无pyhon这个指令索引,被区分为python2.7和python3(默认为python3.8)。在工程环境中zloader/Makefile.inc文件夹下line149 依然是python。有两种解决方法一种为增加一个软连接将python2.7连接到python。
sudo mkdir python
sudo ln -s python3 python
另外一种是修改工程中的Makefile.inc文件中dtb指令脚本python 为 python2.7。
line 149: [ -f gzrom.bin ] && cp gzrom.bin gzrom-dtb.bin && python2.7 ../tools/pmonenv.py -O $$((`tail -n 1 dtbinfo.txt`)) -o $$((`tail -n 2 dtbinfo.txt|head -n 1`)) -f gzrom-dtb.bin -d ${TARGET}.dtb -w al=\(usb0,0\)/boot/vmlinuz al1=\(wd0,0\)/boot/vmlinuz append="'console=ttyS0,115200 console=tty initcall_debug=1 loglevel=20'" FR=1
5.4 编译gzrom.bin文件
根据自己开发的平台在pmon-loongson3文件夹内进入相应的zloader文件夹。映射表如下表所示:
开发架构 | PMON编译文件夹 |
---|---|
3A300+7A1000 | zloader.3a3000_7a |
2K1000 | zloader.ls2k |
输入以下指令:
make cfg
make tgt=rom
就可以编译出执行文件。
6.示例
以编译适配2K1000的Pmon为例:
#进入2K1000编译目录中
root@ubuntu:~/桌面/pmon-loongson3$ cd zloader.ls2k
#编译Pmon可执行文件
root@ubuntu:~/桌面/pmon-loongson3/zloader.ls2k$ make cfg
root@ubuntu:~/桌面/pmon-loongson3/zloader.ls2k$ make tgt=rom
#此时编译完成,当前文件夹下会出现一个gzrom.bin文件
如果需要组合linux设备树,则需要如下指令:
root@ubuntu:~/桌面/pmon-loongson3/zloader.ls2k$ make dtb
#当前文件夹下会出现一个gzrom-dtb.bin文件