华为A200i DK A2 驱动编译
- 环境设置(最后测试这一步不执行也可以在开发板上加载驱动)
“gcc-aarch64-linux-gnu”与“g++-aarch64-linux-gnu”版本要求为 11.3.0,
22.04自带是11.4.0的gcc,
首先在官网下载11.3.0的包:https://ftp.gnu.org/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.gz
上传至ubuntu,
依次执行以下命令:
ar -xzf gcc-11.3.0.tar.gzcd gcc-11.3.0
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/usr/local/gcc-11.3.0 --enable-languages=c,c++
make -j$(nproc)
sudo make install
安装好之后可以在/usr/local/gcc-11.3.0/bin下可以看见编译好的交叉编译工具:gcc-aarch64-linux-
设置环境路径:vi /etc/profile
最后放入:export PATH=/usr/local/gcc-11.3.0/bin:$PATH
检查环境:aarch64-linux-gcc -v
- 内核编译
检验环境
aarch64-target-linux-gnu-gcc -v
如果是not find
需要source /etc/profile (激活环境变量)
bash build.sh dtb
bash build.sh device
bash build.sh kernelSource
- 编写驱动代码
首先创建一个文件夹
mkdir dev
cd dev
Touch hello.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
Static int __init helllo_init(void)
{
Printk(“__hello !__”);
}
Static void __exit hello_exit(void)
{
Printk(“__bye bye__”);
}
Module_init(helllo_init);
Module_exit(hello_exit);
MODULE_LICENSE("GPL")
- 编译makefile文件
obj-m := hello.o #编译成内核模块
all:
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) modules
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean
编译命令
先cd到/linux-4.19目录下,然后
make ARCH=arm64 CROSS_COMPILE=aarch64-target-linux-gnu- M=<驱动所在文件夹> modules
也可以(在驱动文件夹)
make -C /home/<路径>/Ascend310B-sdk/Ascend310B-source/driver/kernel/linux-4.19 ARCH=arm64
M=`pwd` modules CROSS_COMPILE=aarch64-target-linux-gnu-
- 放入开发板运行
Insmod hello.ko
Lsmod 查看驱动