t113-c-内核字符型设备驱动篇
1.linux-tina-编译篇2.tina环境布局与ssh篇3.t113-c-dts探索篇14.t113-c-dts学习篇25.t113-c-驱动ko制作与运行篇6.t113-c-内核驱动寻找问题篇
7.t113-c-内核字符型设备驱动篇
8.t113-c字符型驱动复盘(自动创建设备文件)9.t113-c-设备树-驱动调用篇(获取设备节点和属性)10.t113-c-led驱动篇(调用设备树)11.t113-c-spi驱动篇前篇12.T113学习之-lcd--framebuffer篇13.t113-c-udp篇14.t113-c-framebuffer-画点篇15.v831-T113-c-udp发送篇16.t113-c-i2s学习篇(cards)17.t113-c-i2s设备设置尝试18.t113-c-wpa_cli遇到问题19.t113-c-多点触摸20.t113-c-lvgl触摸接口接入21.t113-c-lvgl-animation之bug22.t113-c-lvgl-anim篇23.t113-shell文件制作那么既然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-
命令
若出现warning: environment variable 'STAGING_DIR' not defined
看以下链接
https://blog.csdn.net/weixin_43640306/article/details/88852189
运行
通过modinfo查看ko文件详细信息
查看设备号
用cat /proc/devices来查询,如果查询不到试试cat /proc/misc,储存设备号还是中断好像
手动创建字符型设备
使用mknod 名称 c(表示字符型设备) 主设备号 副设备号
运行应用层应用
成功运行!
合集:
t113
分类:
t113_c_tina
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」