740|0

53

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A 驱动开发--Hello World! [复制链接]

  本帖最后由 乘简 于 2023-11-1 11:09 编辑

比如想驱动GPIO引脚的PWM功能,从而驱动电机无级变速,那么板子右边的GPIO中没有提供PWM功能,因为linux是分时操作系统,如果用软件定时器的话,我测下来,定时精度只能达到毫秒级别,这还是我没跑程序的情况下,不知道CPU占用上来后,精度能否保持在毫秒级别,就算能保持住,用来驱动PWM还是不够的,于是乎,就去学习了一下驱动编程,对于之前无linux开发经验的人来说,确实走了不少弯路啊,总算搞定了驱动开发的环境搭建,也算是开发驱动入门了

一、环境搭建

  • #1 烧录最新的系统,注意bin文件名与路径改了
  • :: 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
  • #2 安装编译器
  • sudo apt install build-essential gdb
  • #3 安装驱动编译相关的库
  • 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
  • #4 安装git,新版的系统中,不用这步
  • sudo apt-get install git
  • #5 下载内核源码,比如先进入/home/debian目录, debian是我登录名,再执行下面的命令
  • git clone https://github.com/revyos/thead-kernel.git -b lpi4a kernel
  • 下载完后,会多出1个kernel文件夹,这个就是内核源码
  • #6 进入kernel文件夹
  • cd kernel
  • #7 使用官网的配置文件
  • make ARCH=riscv revyos_defconfig
  • #8 修改编译参数
  • make ARCH=riscv menuconfig
  • #9 编译内核,耗时非常久,要有耐心
  • 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驱动开发结束。。。

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表