【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A 驱动开发--Hello World!
[复制链接]
本帖最后由 乘简 于 2023-11-1 11:09 编辑
比如想驱动GPIO引脚的PWM功能,从而驱动电机无级变速,那么板子右边的GPIO中没有提供PWM功能,因为linux是分时操作系统,如果用软件定时器的话,我测下来,定时精度只能达到毫秒级别,这还是我没跑程序的情况下,不知道CPU占用上来后,精度能否保持在毫秒级别,就算能保持住,用来驱动PWM还是不够的,于是乎,就去学习了一下驱动编程,对于之前无linux开发经验的人来说,确实走了不少弯路啊,总算搞定了驱动开发的环境搭建,也算是开发驱动入门了
一、环境搭建
-
- :: Script to flash imagess via fastboot, edit image path first
-
- [url=home.php?mod=space&uid=43340]@echo[/url] off
- call:RunACmd "fastboot.exe flash ram images\u-boot-with-spl-lpi4a.bin"
- call:RunACmd "fastboot.exe reboot"
- ping 127.0.0.1 -n 5 >nul
- call:RunACmd "fastboot.exe flash uboot images\u-boot-with-spl-lpi4a.bin"
- call:RunACmd "fastboot.exe flash boot images\boot.ext4"
- call:RunACmd "fastboot.exe flash root images\root.ext4"
-
- pause
- exit
-
- :RunACmd
- SETLOCAL
- set CmdStr=%1
- echo IIIIIIIIIIIIIIII Run Cmd: %CmdStr%
- %CmdStr:~1,-1% || goto RunACmd
-
- GOTO:EOF
-
-
- sudo apt install build-essential gdb
-
-
- sudo apt install -y gdisk dosfstools libncurses-dev gawk flex bison openssl libssl-dev tree libelf-dev libudev-dev libpci-dev libiberty-dev autoconf device-tree-compiler
-
-
- sudo apt-get install git
-
-
- git clone https://github.com/revyos/thead-kernel.git -b lpi4a kernel
- 下载完后,会多出1个kernel文件夹,这个就是内核源码
-
-
- cd kernel
-
-
- make ARCH=riscv revyos_defconfig
-
-
- make ARCH=riscv menuconfig
-
-
- make ARCH=riscv -j8
-
-
这里特别说一下第8步,修改参数,虽然就加了1个小小的+号,但我花了很多时间在这个坑上,系统烧了两遍(而且新系统xrdp远程桌面怎么也用不了)
首先,进入这个菜单
注意第二行, ()中是空的,回车进去,输入+号
改成这样
然后再保存退出,再执行第9步,编译驱动即可。。。
二、驱动开发
C文件代码
- #include <linux/module.h>
-
-
- static int __init hello_init(void){
- printk("Hello World!\n");
- return 0;
- }
-
- static void __exit hello_exit(void){
- printk("exit hello!\n");
- }
-
-
- module_init(hello_init);
-
- module_exit(hello_exit);
-
- MODULE_LICENSE("GPL");
Makefile文件,注意首字母大小
-
- KERNELDIR := /home/debian/kernel
- CURRENT_PATH := $(shell pwd)
-
- obj-m := hello.o
-
- build: kernel_modules
-
- kernel_modules:
- $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
-
- clean:
- $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
三、编译驱动,输入make即可,可以看到,多了hello.ko文件
查看系统内核版本,为5.10.113+
查看刚编译的.ko文件的版本
可以看到,版本是对得上的,后面有+号,之前加载驱动一直报错,还下载了最新系统。烧录了两次,后来才知道这个版本信息,是可以改的
四、加载驱动,可以看到,驱动已经加载了
卸载驱动,rmmod
可以看到,驱动已经卸载了,可以用dmesg命令查看printk打印的信息
到这里,hello world驱动开发结束。。。
|