首页 > 其他分享 >t113-c-内核字符型设备驱动篇

t113-c-内核字符型设备驱动篇

时间:2023-07-05 16:22:42浏览次数:55  
标签:字符 ko CROSS t113 linux 驱动 arm 内核

那么既然ko的驱动已经可以运行,那么我们来写几个简单的操作设备树的内核驱动

字符型设备驱动和应用层

这俩种代码是分开的,设备驱动调用的是内核的地址,而应用层则是相当于虚拟地址,所以应用层传递参数的时候不能直接付给指针,要调用相对于的参数

内核->驱动->应用

驱动的编写

找到sdk内的例程,按照例程去写ko文件

ko文件的编写

先照着写一份结构体,写上拥有者、打开、写入、读取、释放的操作函数

应用层编写

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

//一个参数个数一个参数字符串
int main(int argc,char *argv[])
{
    int flie;
    size_t count;
    char readbuffer[100];
    flie = open(argv[1],O_RDWR);
    if(flie<0)
    {
        printf("failed to open\r\n");
    }
    else
    {
        printf("open it\r\n");
    }

    count = read(flie,readbuffer,50);//返回实际读取的数量,如果为副则失败
    if(count<0)
    {
        printf("failed to read\r\n");
    }
    else
    {
        printf("read it\r\n");
    }

    count = write(flie,"nihao",6);
    if(count<0)//如果为负数失败并且错误类型保存在全局变量errno中,
    {
        printf("failed to read\r\n");
    }
    else
    {
        printf("write it\r\n");
    }

    count = close(flie);
    if(count<0)//如果为负数失败并且错误类型保存在全局变量errno中,
    {
        printf("close to read\r\n");
    }
    else
    {
        printf("close it\r\n");
    }

    return 0;
}

编写makefile

KEDIR = /home/momo/T113/Tina-Linux/lichee/linux-5.4
CROSS_COMPILESS = /home/momo/T113/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-

CURRENT-PATH := $(shell pwd)

obj-m := chabasemo.o

build: kernel_modules

kernel_modules:
			${MAKE} ARCH=arm CROSS_COMPILE=$(CROSS_COMPILESS) -C ${KEDIR} M=${CURRENT-PATH} modules
			$(CROSS_COMPILESS)gcc -o chabase chabase.c 
clean:
			${MAKE} ARCH=arm CROSS_COMPILE=$(CROSS_COMPILESS) -C ${KEDIR} M=${CURRENT-PATH} clean
			rm -rf modules.order
			rm -f chabase

cmake后就可以得到ko和可执行文件

记住要用

make ARCH=arm CROSS_COMPILE=~/T113/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-

命令

运行

通过modinfo查看ko文件详细信息

查看设备号

链接

标签:字符,ko,CROSS,t113,linux,驱动,arm,内核
From: https://www.cnblogs.com/recodemo/p/17525871.html

相关文章

  • MySQL常用字符串函数
    一、常用函数1.1ASCII(str)返回值为字符串str的最左字符的数值,即取得最左字符的ascii码。假如str为空字符串,则返回值为0。假如str为null,则返回值为null。mysql>selectascii('a');+--------------+|ascii('a')|+--------------+|97|+--------------+1rowin......
  • C++、Lua、Python字符串防止转义
    使用场景C++里测试路径需要转义,Windows复制路径里面的斜杠需要加斜杠,每次都需要操作比较麻烦,而且看着也不好看换行,代码里有时候硬编码一些文本、数据,依赖""的自动拼接和行末的斜杠,需要手动写\r\n换行C++Rawstringliteral以前用Lua,里有[[]],防止转义非常方便。后来了解到P......
  • 批量添加字符串前后单引号(notepad)
    批量添加字符串前后的单引号和逗号准备数据:在此数据前后添加单引号和逗号,实现效果如下‘30’,A先加前面单引号首部添加了一个单引号:B再加后面的单引号和逗号最终把它放到表格、文本里面......
  • 数据库问题之“字符编码问题 Cause: java.sql.SQLException: Incorrect string value:
     1)表1和表2的产品名称[数据库字段]字符编译方式不一致①问题 org.springframework.jdbc.UncategorizedSQLException:Errorupdatingdatabase.Cause:java.sql.SQLException:Incorrectstringvalue:'\xF0\x9F\x8E\x81\xE7\x88...'forcolumn'product_name'atr......
  • python计算某字符出现次数
    count()方法用于统计字符串里某个字符或子字符串出现的次数.st1=input().upper()st2=input().upper()print(st1.count(st2))tips:只要将所有字符串统一转化为大写或者小写,计算次数即可。upper()全部转化为大写lower()全部转化为小写另:str.count(sub,start=0,en......
  • js 密码 大写字母,小写字母,数字,特殊字符,包含2种以上
    constvalidatepassword=(rule,value,callback)=>{if(value==""||value==null){returncallback(newError('请输入8位以上字符,包含大写字母、小写字母、数字、特殊字符的2种以上情况'));}if(value.length<8){......
  • python学习_转义字符
    一、什么是转义字符转义字符反斜杠(\),转义字符的表现形式:反斜杠+想要实现转义功能首字母如:\n:换行,n是newline的首字母    \r:回车,r是return的首字符,回车是光标回到当前行的开头位置    \t:水平制表符,t是tab的首字母(一个\t占4个空格)    \b:退格,b是ba......
  • 数据库内核:PostgreSQL 事务
    事务处理事务简介事务是一个应用层面的操作,通过一系列的数据库操作执行。一个事务会影响数据库的状态。对于事务来说,会有很多限制,这些限制实质上是保障整个数据库的状态是合乎标准的,但是在执行事务期间,可能会有一部分限制被打破,但是如果该事务是合法的,那么在完成或放弃当前......
  • 字符设备驱动另一种写法—mmap方法操作LED
    最近在看韦老师的视频,讲解了很多种字符设备的驱动写法。经过自己的研究之后,我发现还有另外一种写法,直接在应用层操作,省去了内核中的地址映射部分,使得用户可以在应用层直接操作LED。       mmap方法是把设备物理地址直接映射到用户空间的一种系统调用方法,他......
  • 第五课. 内核中断系统中的设备树
    交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)交流群二:QQ群:536785813(单片机-嵌入式)公 众 号:百问科技版本日期作者说明V12020韦东山技术文档这节课讲解如何在中断系统中使用设备树,也就是用设备树如何描述中断。中断体系在4.x内核中变化很大,中断体系又跟pinctrl系......