龙芯2K0300 BSP 开发指南
【免费下载链接】docs-2k0300 2k0300 平台板卡的产品规格书,用户手册等文档 项目地址: https://gitcode.com/open-loongarch/docs-2k0300
本文详细介绍了龙芯2K0300 BSP(Board Support Package)的开发指南,包括BSP 1.0与BSP 2.0的区别、源码编译与交叉工具链配置、u-boot与内核编译流程以及驱动模块开发与加载。内容涵盖工具链升级、内核版本差异、环境准备、源码获取、编译步骤及常见问题解决方法,为开发者提供全面的技术指导。
BSP 1.0 与 BSP 2.0 的区别
龙芯2K0300的BSP(Board Support Package)是支持硬件平台的基础软件包,包含引导程序、内核、驱动和工具链等组件。BSP 1.0和BSP 2.0是不同版本的支持包,主要区别体现在工具链、内核版本、功能支持及开发流程上。以下从多个维度对比两者的差异:
1. 工具链升级
| 特性 | BSP 1.0 | BSP 2.0 |
|---|---|---|
| 工具链版本 | GCC 8.3 | GCC 13.3 |
| 支持架构 | LoongArch64 | LoongArch64(优化指令集支持) |
| 安装方式 | 手动下载并解压 | 通过脚本自动安装 |
2. 内核版本差异
| 特性 | BSP 1.0 | BSP 2.0 |
|---|---|---|
| 内核版本 | Linux 5.10 | Linux 6.12 |
| 驱动支持 | 基础外设驱动 | 新增CAN、USB 3.0等驱动 |
| 性能优化 | 基础调度优化 | 多核调度增强 |
3. 编译流程优化
- BSP 1.0:需手动配置环境变量,依赖较多(如
libssl-dev、libelf-dev)。 - BSP 2.0:引入自动化脚本
set_env.sh,简化工具链和内核配置。
# BSP 2.0示例
$ source ./set_env.sh abi2
4. 功能扩展
- BSP 2.0新增支持:
- 蜂鸟板的CAN总线驱动。
- 先锋派的USB 3.0接口。
- 图形化配置工具(如
menuconfig集成)。
5. 代码仓库与文档
| 资源类型 | BSP 1.0 | BSP 2.0 |
|---|---|---|
| 内核仓库 | linux-5.10 | linux-6.12 |
| 文档链接 | 快速指南-v1.0 | 快速指南-v2.0 |
6. 兼容性说明
- BSP 1.0:适用于Ubuntu 18.04/20.04。
- BSP 2.0:需Ubuntu 22.04及以上版本,对硬件资源要求更高。
通过上述对比,开发者可根据项目需求选择合适的BSP版本。BSP 2.0在性能和功能上更具优势,但需注意环境适配问题。
源码编译与交叉工具链配置
龙芯2K0300 BSP开发的核心环节之一是源码编译与交叉工具链的配置。这一过程涉及从获取源码到生成可运行镜像的全流程,是开发的基础。以下将详细介绍如何在Ubuntu环境下完成这一任务。
1. 环境准备
在开始之前,确保系统已安装必要的工具链和依赖库。以下命令适用于Ubuntu 22.04或更高版本:
sudo apt update
sudo apt install -y git vim openssh-server make gcc g++ bison flex libssl-dev libelf-dev
2. 获取源码
龙芯2K0300的源码主要包括U-Boot、Linux内核和Buildroot。以下命令用于克隆这些仓库:
mkdir ws
cd ws
git clone https://gitee.com/open-loongarch/u-boot.git
git clone https://gitee.com/open-loongarch/linux-6.12.git
git clone https://gitee.com/open-loongarch/buildroot-2024.08.git
3. 交叉工具链配置
交叉工具链是编译龙芯2K0300源码的关键。以下是配置步骤:
-
下载工具链:
wget https://gitee.com/open-loongarch/cross-toolchain/raw/master/gcc-13/loongarch64-linux-gnu-gcc13.3.tar.xz sudo tar xf loongarch64-linux-gnu-gcc13.3.tar.xz -C /opt -
设置环境变量: 在U-Boot或内核目录中运行以下命令:
source ./set_env.sh abi2
4. 编译U-Boot
U-Boot是系统的引导程序,以下是编译步骤:
-
选择配置:
cd ~/ws/u-boot ./buildenv.sh 2k300根据提示选择
loongson_2k300_pai_defconfig(先锋派)或loongson_2k300_mini_dp_defconfig(蜂鸟板)。 -
编译:
make -
安装工具: 将
mkimage工具复制到系统路径:cd tools sudo cp mkimage /usr/bin/
5. 编译Linux内核
Linux内核的编译过程如下:
-
选择配置:
cd ~/ws/linux-6.12 ./buildenv.sh 2k300选择
loongson_2k300_defconfig。 -
编译内核镜像:
make uImage -
编译模块:
make modules
6. 编译驱动模块
如果需要编译自定义驱动模块,可以按照以下步骤操作:
-
进入驱动目录:
cd ~/ws/01 -
编译模块:
make -f Makefile-cross
7. 模块加载与卸载
将编译生成的.ko文件加载到目标设备:
-
加载模块:
insmod hello.ko -
查看模块:
lsmod -
卸载模块:
rmmod hello
8. 流程图
以下为源码编译与交叉工具链配置的流程图:
9. 常见问题
以下表格总结了编译过程中可能遇到的问题及解决方法:
| 问题 | 原因 | 解决方案 |
|---|---|---|
make: command not found | 未安装make工具 | sudo apt install make |
openssl/evp.h: No such file or directory | 缺少OpenSSL开发库 | sudo apt install libssl-dev |
flex: not found | 未安装flex工具 | sudo apt install flex |
通过以上步骤,可以顺利完成龙芯2K0300的源码编译与交叉工具链配置。
u-boot 与内核编译流程
本文将详细介绍如何在龙芯2K0300平台上完成u-boot与内核的编译流程,包括环境配置、工具链安装、源码获取、编译步骤以及常见问题的解决方法。通过本文的指导,开发者可以快速搭建开发环境并生成可运行的固件。
环境准备
在开始编译之前,需要确保系统环境满足以下要求:
- 操作系统:推荐使用Ubuntu 20.04或更高版本。
- 软件依赖:安装必要的工具链和依赖库。
- 工作目录:创建一个干净的工作目录用于存放源码和编译输出。
安装依赖工具
运行以下命令安装所需的工具:
sudo apt update
sudo apt install git vim openssh-server make gcc g++ bison flex libssl-dev libelf-dev -y
获取源码
-
u-boot源码:
git clone https://gitcode.com/open-loongarch/u-boot.git -
内核源码:
git clone https://gitcode.com/open-loongarch/linux-5.10.git
配置交叉工具链
龙芯2K0300平台需要使用特定的交叉工具链进行编译。下载并安装工具链:
wget http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.4.tar.xz
sudo tar xf loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.4.tar.xz -C /opt
sudo ln -sf loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.4 /opt/loongson-gnu-toolchain-x86_64-loongarch64-linux-gnu
编译u-boot
-
进入u-boot目录:
cd u-boot source ./set_env.sh -
选择配置:
- 先锋派使用
loongson_2k300_pai_defconfig。 - 蜂鸟板使用
loongson_2k300_mini_dp_defconfig。
运行以下命令选择配置:
./buildenv.sh 2k300 - 先锋派使用
-
编译u-boot:
make -
复制工具: 将生成的
mkimage工具复制到系统路径:sudo cp tools/mkimage /usr/bin/
编译内核
-
进入内核目录:
cd linux-5.10 source ./set_env.sh -
选择配置:
./buildenv.sh 2k300 -
编译内核镜像:
make uImage编译完成后,生成的
uImage位于arch/loongarch/boot/目录下。
常见问题
-
缺少依赖库:
- 如果编译过程中提示缺少库文件,请根据错误信息安装对应的库。例如:
sudo apt install libelf-dev -y
- 如果编译过程中提示缺少库文件,请根据错误信息安装对应的库。例如:
-
工具链路径问题:
- 确保工具链路径正确配置,并在
set_env.sh中正确声明。
- 确保工具链路径正确配置,并在
流程图
以下为u-boot与内核编译的流程图:
通过以上步骤,开发者可以顺利完成龙芯2K0300平台的u-boot与内核编译工作。如有其他问题,请参考官方文档或社区支持。
驱动模块开发与加载
在龙芯2K0300 BSP开发中,驱动模块的开发与加载是一个关键环节。本节将详细介绍如何开发一个简单的内核模块,并将其加载到系统中运行。
1. 驱动模块开发
驱动模块的开发通常包括以下步骤:
- 编写模块代码:创建一个简单的模块文件,例如
hello.c,内容如下:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
static int __init hello_init(void) {
printk(KERN_INFO "Hello, LoongArch 2K0300!\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, LoongArch 2K0300!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple driver for LoongArch 2K0300");
- 编写Makefile:创建一个
Makefile文件,用于编译模块:
obj-m := hello.o
KDIR := /path/to/your/kernel/source
PWD := $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
2. 编译驱动模块
在完成模块代码和Makefile的编写后,执行以下命令编译模块:
$ make -f Makefile-cross
如果编译过程中出现错误,例如缺少scripts/module.lds文件,可能是由于内核未完全编译。此时需要先完整编译内核:
$ cd /path/to/kernel/source
$ make
然后再次尝试编译模块。
3. 驱动模块加载与卸载
编译成功后,生成的.ko文件可以通过以下命令加载到内核中:
- 加载模块:
# insmod hello.ko
- 查看已加载的模块:
# lsmod | grep hello
- 卸载模块:
# rmmod hello
- 查看内核日志:
# dmesg | tail
4. 示例输出
以下是一个模块加载和卸载的示例输出:
[ 10.123456] Hello, LoongArch 2K0300!
[ 15.654321] Goodbye, LoongArch 2K0300!
5. 注意事项
- 内核版本匹配:确保模块编译时使用的内核版本与目标系统一致。
- 依赖项:编译内核模块前,需安装必要的工具链和依赖项,如
gcc、make、libssl-dev等。 - 调试信息:在开发过程中,可以通过
printk输出调试信息,并使用dmesg查看。
通过以上步骤,您可以轻松完成龙芯2K0300驱动模块的开发与加载。
总结
本文系统性地梳理了龙芯2K0300 BSP开发的核心流程,从版本差异分析到具体实践操作,包括工具链配置、内核编译、驱动开发等关键环节。通过对比BSP 1.0和2.0的特性差异,并结合实际编译示例与问题解决方案,帮助开发者快速掌握龙芯2K0300平台的开发要点,为后续项目落地奠定基础。
【免费下载链接】docs-2k0300 2k0300 平台板卡的产品规格书,用户手册等文档 项目地址: https://gitcode.com/open-loongarch/docs-2k0300
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



