orangepi zero2w H618驱动开发(一)

这篇具有很好参考价值的文章主要介绍了orangepi zero2w H618驱动开发(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 环境安装

按照官方操作安装开发环境和完成《Linux SDK——orangepi-build使用说明》章节
官方操作
linux内核源码的版本有6.1和5.4,我这选择的是6.1版本的

二、驱动开发

  • 执行vim ~/.bashrc后,在文件最后加上

    export CROSS_COMPILE=aarch64-none-linux-gnu-
    export ARCH=arm64
    export PATH=/home/coolx/orangepi-build/toolchains/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin:$PATH#写入实际编译器地址
    export GCC_COLORS=auto
    
  • 拷贝orangepi-build/external/config/kernel/linux-6.1-sun50iw9-next.config到orangepi-build/kernel/orange-pi-6.1-sun50iw9目录下

  • 修改orangepi-build/kernel/orange-pi-6.1-sun50iw9/scripts/setlocalversion 文件里的第142行,改为如下

    139         # If the variable LOCALVERSION is set (including being set
    140         # to an empty string), we don't want to append a plus sign.
    141         scm=$(scm_version --short)
    142         res="$res${scm:+}"
    143 fi
    144 
    145 echo "$res"
    
  • 修改orangepi-build/kernel/orange-pi-6.1-sun50iw9/Makefile文件里的第5行,改为如下

       1 # SPDX-License-Identifier: GPL-2.0
       2 VERSION = 6
       3 PATCHLEVEL = 1
       4 SUBLEVEL = 31
       5 EXTRAVERSION =-sun50iw9
       6 NAME = Curry Ramen
    

进入orangepi-build/kernel/orange-pi-6.1-sun50iw9执行make menuconfig
<Load>linux-6.1-sun50iw9-next.config文件,然后<Save>linux-6.1-sun50iw9-next.config这个文件,最后<Exit>退出,执行make进行内核编译

  1. 驱动代码led_dev.c如下
//led_dev.c
#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 dev_t devno;                //设备号
static int major =231;                     //主设备号
static int minor =0;                       //次设备号
static char *module_name="coolx_led";   //模块名

#define PC_CFG0_REG 0x0300B000 + 2 * 0x24 + 0x04 //PC配置寄存器 A:0 B:1 C:2 ....
#define PC_DATA_REG 0x0300B000 + 2 * 0x24 + 0x10//PC数据寄存器 A:0 B:1 C:2 ....
#define PIN_N 13 //第5个引脚
#define N (PIN_N % 8 * 4)   //引脚x : x % 8 * 4

// 将该文件放在 orangepi-build-main/kernel/orange-pi-4.9-sun50iw9/drivers/char 下
static struct class *Coolx_class;
static struct device *Coolx_class_dev;

volatile unsigned int *gpio_con = NULL;
volatile unsigned int *gpio_dat = NULL;
/*打开设备*/
static int led_open (struct inode *node, struct file *filp)
{
   if (gpio_con) {
    /*打开成功*/
    }
    else {
        return -1;
    }
    return 0;
}

/*写设备*/
static ssize_t led_write (struct file *filp, const char __user *buf, size_t size, loff_t *off)
{
    unsigned char val;        
    copy_from_user(&val, buf, 1);
    printk("val = %c",val);
    if (val)
    {
        
        *gpio_dat |= (1 << PIN_N);//引脚5设置1
    }
    else
    {
        *gpio_dat &= ~(1 << PIN_N);//引脚5设置0
    }
 
    return 1; 
}

/*关闭设备*/
static ssize_t led_read (struct file *file1,char __user *buf,size_t count, loff_t *ppos)
{
    return 0;
}

/*
 * 设备操作函数结构体
 */
static struct file_operations file_operation = {
    .owner = THIS_MODULE,
    .open  = led_open,
    .write = led_write,
    .read = led_read,
};

/* 设备初始化 */ 
int __init Coolx_led_init(void)
{
    int ret;
    devno = MKDEV(major,minor);  //创建设备号
    ret = register_chrdev(major, module_name, &file_operation);// cat /proc/devices
    if (ret < 0) {
        printk(KERN_ERR "fail\n");
        return -1;
    }
    Coolx_class=class_create(THIS_MODULE,module_name);//由代码在Dev下自动生成设备 /sys/class 
    Coolx_class_dev =device_create(Coolx_class,NULL,devno,NULL,module_name);  //创建设备文件  /dev/
    printk(KERN_ERR "init \n");

    gpio_con = (volatile unsigned int *)ioremap(PC_CFG0_REG, 1);//iounmap函数用于取消ioremap()所做的映射
    //选择1
    gpio_dat = (volatile unsigned int *)ioremap(PC_DATA_REG, 1);
    //选择2
    //gpio_dat = gpio_con + 4;  //数据寄存器 指针+4是移动了4*4=16个字节 原来是0x24 现在是0x34

    *gpio_con &= ~(7 << N);  //7=111 取反000 20:22设置000 默认是0x7=111 失能
    *gpio_con |=  (1 << N);  //设置输出 20:22设置001

    *gpio_dat &= ~(1 << PIN_N);  //第5个引脚初始化设置0
    return 0;
}


void __exit Coolx_led_exit(void)
{
    device_destroy(Coolx_class,devno);
    class_destroy(Coolx_class);
    /* 注销字符设备驱动 */ 
    unregister_chrdev(major, module_name);
    iounmap(gpio_con);//
    iounmap(gpio_dat);
    printk("exit!\r\n");
}
//注册模块加载函数
module_init(Coolx_led_init);
//卸载模块加载函数
module_exit(Coolx_led_exit);
//开源信息
MODULE_LICENSE("GPL");

  1. Makefile如下
#Makefile
# 1. 使用不同的开发板内核时, 一定要修改KERN_DIR
# 2. KERN_DIR中的内核要事先配置、编译, 为了能编译内核, 要先设置下列环境变量:
# 2.1 ARCH,          比如: export ARCH=arm64
# 2.2 CROSS_COMPILE, 比如: export CROSS_COMPILE=aarch64-linux-gnu-
# 2.3 PATH,          比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 
# 注意: 不同的开发板不同的编译器上述3个环境变量不一定相同,
#       请参考各开发板的高级用户使用手册

KERN_DIR = /home/coolx/orangepi-build/kernel/orange-pi-6.1-sun50iw9

all:
	make -C $(KERN_DIR) M=`pwd` modules 

clean:
	make -C $(KERN_DIR) M=`pwd` modules clean
	rm -rf modules.order

obj-m	+= led_dev.o
  1. 编译加载module
    进入编写了led_dev.c 和 Makefile的目录下,执行make编译module,完成后执行

    scp led_dev.ko orangepi@开发板局域网ip地址:/home/orangepi
    

将模块ko文件上传到开发板
进入开发板环境,加载模块,在/home/orangepi目录下执行

sudo insmod led_dev.ko 

代码中将设备添加到了/dev下,手动添加方法:
查看设备:cat /proc/devices ==>得到 231 coolx_led
sudo mknod /dev/coolx_led c 231 0
查看设备文件:ls /dev ==>得到 coolx_led

关闭心跳灯:

sudo chmod 666  /sys/class/leds/green_led/trigger
sudo echo none > /sys/class/leds/green_led/trigger

可以看到绿色停止闪烁
给设备权限:sudo chmod 666 /dev/coolx_led
点亮led灯:echo -e -n "\x01" > /dev/coolx_led(-e 是以16进制发送,-n 是不发送换行 , “\x01” 就是 0x01)
关闭led灯:echo -e -n "\x00" > /dev/coolx_led

恢复心跳灯:sudo echo heartbeat > /sys/class/leds/green_led/trigger

初学轻喷
参考:
https://blog.csdn.net/m0_53809203/article/details/134236670
http://www.orangepi.cn/orangepiwiki/index.php/%E4%B8%BB%E9%A1%B5
https://whycan.com/t_7577.html
https://www.100ask.net/文章来源地址https://www.toymoban.com/news/detail-772144.html

到了这里,关于orangepi zero2w H618驱动开发(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OrangePi Zero2 TTL 连接示意图

    OrangePi 目前最方便的就是使用调试串口线进行PC与开发板进行链接。 本人使用的型号为CH340模块USB转TTL刷机线,Windows下免驱。 黑线对GND接口,绿线对RX接口,白线对TX接口。

    2024年02月16日
    浏览(24)
  • 【OrangePi Zero2 智能家居】智能家居项目的软件实现

    一、项目整体设计 二、项目代码的前期准备 三、实现语音监听接口 四、实现socket监听接口 五、实现烟雾报警监听接口 六、实现设备节点代码 七、实现接收消息处理接口 整体的软件框架大致如下: 整个项目开启4个监听线程, 分别是: 语音监听线程:用于监听语音指令,

    2024年02月22日
    浏览(32)
  • Orangepi Zero2 全志H616(一):配置初始化和启动流程

    目录 一,Orangepi简单说明 ①为什么使用全志H616 ②基本特性 ③配套操作系统支持 二,刷机和系统启动 ①准备工具 ②登录系统 ● 开发板供电 ● 登录 ● 开发板上板载LED灯测试说明 ③修改登录密码 ④网络配置 ⑤SSH登陆开发板 三,vim设置:tab键缩进及代码行数显示 四,全志

    2024年02月04日
    浏览(27)
  • 香橙派OrangePi zero H2+ 驱动移远4G/5G模块

    目录 1 安装系统和内核文件: 1.1 下载镜像 1.2 内核头安装  1.2.1 下载内核 1.2.2 将内核头文件导入开发板中 1.2.3 安装内核头 2 安装依赖工具: 2.1 Installing Required Host Utilities 3 驱动步骤:        3.1 下载模块驱动文件 3.2 找到接近内核的文件 3.3 将v5.4.51驱动文件导入开发板中

    2024年02月10日
    浏览(41)
  • Linux篇 三、香橙派Zero2搭建Qt环境

    一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 四、Linux修改用户名 五、Ubuntu与Linux板卡建立NFS服务 主要讲述了移植QT的过程 默认在香橙派篇2中,已经成功拉取Linux的SDK源码的情况下 如果失败的话,可以直接去官网下载交叉编译工具 此处路径和上一篇的源码

    2023年04月21日
    浏览(18)
  • 香橙派OrangePi Zero开发板的WiFi连接

    1、准备一个 3.3v 的USB转TTL的模块,将开发板连接到电脑上 注意:引脚连接 a. USB 转 TTL 模块的 GND 接到开发板的 GND 上 b. USB 转 TTL 模块的 RX 接到开发板的 TX 上 c.USB 转 TTL 模块的 TX 接到开发板的 RX 上 2、打开串口调试工具,这里用的是MobaXterm a.Session–Serial b.找到对应COM口 c.

    2024年02月08日
    浏览(58)
  • 可视可交互!在全志H618上用OpenCV读取图像显示到PyQt5窗口上

    OpenCV能够处理图像、视频、深度图像等各种类型的视觉数据,在某些情况下,尽管OpenCV可以显示窗口,但PyQt5可能更适合用于创建复杂的交互式应用程序,而自带GPU的H618就成为了这些图像显示的最佳载体。 这里分享一个代码,功能是使用图像处理库opencv从摄像头获取数据,缩

    2024年02月01日
    浏览(23)
  • 香橙派Zero2刷机和启动

    1.工具: Orangepi Zero2 全志H616开发板 PC机 TF卡及读卡器 操作系统镜像 SDFormatter TF卡的格式化工具(链接:https://pan.baidu.com/s/1XgQlcTQ7xI8Im1EB8dzpbw 提取码:xfjs ) Win32Diskimager 刷机工具(链接:https://pan.baidu.com/s/1otkgb2RjIL8UZyPtT1mAvg 提取码:xfjs ) USB转TTL,用于系统烧写后的串口登录

    2024年02月16日
    浏览(23)
  • 香橙派 Orange Pi Zero2 使用配置指南

    目前市场上树莓派产品价格居高不下,在做了一番对比后发现 香橙派 Orange Pi Zero2 相对于 树莓派 Zero 2 W 性能高了不是一点两点,最关键的是价格也很实在,64位1.5GHz高性能4核CPU,1G内存,千兆网卡,双频无线蓝牙,通用Type-C接口,小巧方便,带上官方外壳(尝鲜价)只要不到

    2024年02月08日
    浏览(41)
  • 树莓派 Raspberry Pi Zero 2W 安装默认系统时 ssh 登录并开启摄像头推流一段时间B

    Raspberry Pi Zero 2W有点鸡肋,hdmi口用的microhdmi口,不是树莓派4b的minihdmi口,然后zero 2W也没有usb接口,有一个microusb安卓的otg接口,很烦,还好有wifi+蓝牙模块,这样子还能ssh,不然我先买了minihdmi口,然后再买一个usb安卓的otg接口,真真是。  我的是2105,21年5月出来的。 官网下

    2024年02月12日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包