首页 > 其他分享 >树莓派内核驱动配置

树莓派内核驱动配置

时间:2023-02-25 22:58:46浏览次数:37  
标签:树莓 module static 内核 驱动 include class pin4

cat  /proc/cpu/nfo可查看cpu信息。pi3 pi4cpu型号不同,起始地址不同。pi3是BCM2835 PI4是BCM2711.

查看cpu起始物理地址的c文件。Pi4 pi3 起始地址不同。

#include <stdio.h>
#include <bcm_host.h>

void main()
{
    unsigned t;
    t = bcm_host_get_peripheral_address();
    printf("baseadd = %x\n",t);
}

这是驱动框架

#include <linux/fs.h>         //file_operations声明
#include <linux/module.h>    //module_init  module_exit声明
#include <linux/init.h>      //__init  __exit 宏定义声明
#include <linux/device.h>     //class  devise声明
#include <linux/uaccess.h>   //copy_from_user 的头文件
#include <linux/types.h>     //设备号  dev_t 类型声明
#include <asm/io.h>          //ioremap iounmap的头文件
 
static struct class *pin4_class;  
static struct device *pin4_class_dev;
 
static dev_t devno;                //设备号
static int major = 231;             //主设备号
static int minor = 0;               //次设备号
static char *module_name = "pin4";   //模块名
 
//led_open函数
static int pin4_open(struct inode *inode,struct file *file)
{
    printk("pin4_open\n");  //内核的打印函数和printf类似
      
    return 0;
}
 
//led_write函数
static ssize_t pin4_write(struct file *file,const char __user *buf,size_t count, loff_t *ppos)
{
    printk("pin4_write\n");
    
    return 0;
}
 
static struct file_operations pin4_fops = {
    .owner = THIS_MODULE,
    .open  = pin4_open,
    .write = pin4_write,
};
 
int __init pin4_drv_init(void)   //真实驱动入口
{
    int ret;
    devno = MKDEV(major, minor);  //创建设备号
    ret   = register_chrdev(major, module_name, &pin4_fops);  //注册驱动  告诉内核,把这个驱动加入到内核驱动的链表中
 
    pin4_class=class_create(THIS_MODULE, "myfirstdemo");        //用代码在dev自动生成设备
    pin4_class_dev =device_create(pin4_class, NULL, devno, NULL, module_name);  //创建设备文件
    
    return 0;
}
 
void __exit pin4_drv_exit(void)
{
    device_destroy(pin4_class, devno);
    class_destroy(pin4_class);
    unregister_chrdev(major, module_name);  //卸载驱动
 
}
 
module_init(pin4_drv_init);  //入口,内核加载该驱动(insmod)的时候,这个宏被使用
module_exit(pin4_drv_exit);
MODULE_LICENSE("GPL v2");
 

 

driver.c cp 到linux/drivers/ach(或者drivers下其他文件夹,到哪个文件夹就改哪个文件夹下的Makefile)

vi Makefile  -m表示模块化编译   驱动文件名.o(这是模仿他这里面的文件写的)

 

 

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7l make modules(此命令要在源码起始目录进行,不然报错no rules。)

得到.ko文件到树莓派。scp ....

 

 

sudo insmod qudong2.ko 加载内核驱动

ls /dev/pin4 -l查看有无驱动:

sudo chmod 666 /dev/pin4给权限

dmesg看驱动打印在内核的信息

sudo rmmod +驱动名(不需要写ko)将驱动卸载。

运行test.c

 

标签:树莓,module,static,内核,驱动,include,class,pin4
From: https://www.cnblogs.com/hetaoBlog/p/17154740.html

相关文章

  • linux驱动移植-SPI控制器驱动
    在Mini2440裸机开发之SPI(OLEDSSD1306)我们介绍了S3C2440这款SOC的I2C结构,其内部只有一个SPI控制器:S3C2440SPI相关引脚定义: SPISCLKMOSIMISOSSSPI0GPE13GP......
  • VK2C22A/B LQFP52/48高抗干扰LCD液晶驱动芯片/LCD液晶段码驱动IC,适用于各类医用仪器
    产品型号:VK2C22A/B产品品牌:永嘉微电/VINKA封装形式:LQFP52/48、DICE(COB邦定片)、COG(邦定玻璃用)产品年份:新年份原厂,工程服务,技术支持VK2C22A/B概述: VK2C22是一个点阵式存......
  • Linux内核红黑树1—Documentation/rbtree.txt翻译
    转自:https://www.cnblogs.com/hellokitty2/p/15362630.html1.什么是红黑树,它们有什么用?------------------------------------------------红黑树是一种自平衡二叉搜索树......
  • Linux内核红黑树2—移植笔记
    转自:https://www.cnblogs.com/hellokitty2/p/15362596.html一、学习笔记1.rbtree简介rbtree,全称是Red-BlackTree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树......
  • 树莓派源码内核配置(二)
    再多嘴一句:树莓派LINUX源码配置,是为了驱动代码的编写,驱动代码编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标是形成.config文件,该文件知道makefile去把有......
  • 安装Jumpserver Core内核
    安装JumpserverCore内核netstat-tunlp|grep#设置pip源,可选#设置pip安装模块源,都是开发工程师,会告诉你的操作。python-mpipinstall--upgradepip-ihttps......
  • 记录因net.ipv4.tcp_tw_recycle=1内核参数导致ssh登录不上的问题
    机器配置了 net.ipv4.tcp_tw_recycle=1 ,表示开启TCP连接中TIME-WAITsockets的快速回收。这种配置会导致一个问题,当服务是一个网关类的应用的时候且访问量很大的时候容......
  • Linux LCD驱动
    一、Linux下LCD驱动简析1.与裸机的异同在Linux中应用程序最终也是通过操作RGBLCD的显存来实现在LCD上显示字符、图片等信息,但是Linux系统的内存管理......
  • Linux Broadcom Bluetooth BCM43142A0 蓝牙驱动安装
    LinuxBroadcomBluetoothBCM43142A0蓝牙驱动安装 想转到Linux,奈何蓝牙鼠标不识别。经历了4个发行版的努力(LinuxMint,Pop!OS,OpenSuse,Fedora),才发现,电脑的蓝牙设备没......
  • rk3568 | 瑞芯微平台GPIO引脚驱动编写
    最近在玩瑞芯微平台的产品,移植了几个设备的驱动,遇到了一些问题,总结后发现大部分问题都出在了GPIO配置的问题上,写下本篇文章,用来分享一下调试的心得。有喜欢瑞芯微的朋友,可......