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文件制作我们以pwm为例
编写程序
1.首先编写出入口函数
// #include "linux/module.h"
// #include "linux/fs.h"
// //#include "linux/stddef.h"
// #include "linux/types.h"
// //#include "crypto/if_alg.h"
#include "treecom.h"
static int __init startin(void)
{
return 0;
}
static void __exit startout(void)
{
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xiaomo <2712767798@qq.com>");
MODULE_DESCRIPTION("testting");
// MODULE_ALIAS("ipt_limit");
// MODULE_ALIAS("ip6t_limit");
module_init(startin);
module_exit(startout);
2.导入节点
我们使用以下函数
路径在这里可以看见
我们通过关键字可以知道可以用以下函数来搜寻总的属性,并且可以通过全局搜索来知道最后的一个参数其实可以用NULL来自动判断长度
编写以下代码
3.编写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 := treecom.o
build: kernel_modules
kernel_modules:
${MAKE} -C ${KEDIR} M=${CURRENT-PATH} modules
clean:
${MAKE} -C ${KEDIR} M=${CURRENT-PATH} clean
rm -rf treecom.order
4.编译,运行
编译时候出了错误,因为inline是函数的用法所以删掉inline即可编译成功
放到板子上运行发现错误由于位进行成功printk不知道在哪出了错误
进行调试后发现原来是找不到路径
修改后成功运行
代码
// #include "linux/module.h"
// #include "linux/fs.h"
// //#include "linux/stddef.h"
// #include "linux/types.h"
// //#include "crypto/if_alg.h"
#include "treecom.h"
#if 0
pwm0: pwm0@2000c10 {
compatible = "allwinner,sunxi-pwm0";
pinctrl-names = "active", "sleep";
reg = <0x0 0x02000c10 0x0 0x4>;
reg_base = <0x02000c00>;
};
#endif
static int __init startin(void)
{
struct device_node *pw_nd=NULL;
struct property *compatible=NULL;
pw_nd=of_find_node_by_path("/soc@3000000/pwm0@2000c10"); //获取节点
if(pw_nd==NULL){
printk("failed to create node \r\n");
goto FINEFAIL;
}
else{
printk("create node \r\n");
}
compatible=of_find_property(pw_nd,"compatible", NULL); //获取属性
if(compatible==NULL){
printk("failed to fine compatible \r\n");
goto FINEFAIL;
}
else{
printk("fine compatible \r\n");
}
printk("compatible is %s\r\n",compatible->value);
return 0;
FINEFAIL:
return -22;
}
static void __exit startout(void)
{
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xiaomo <2712767798@qq.com>");
MODULE_DESCRIPTION("testting");
// MODULE_ALIAS("ipt_limit");
// MODULE_ALIAS("ip6t_limit");
module_init(startin);
module_exit(startout);
合集:
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 热点速览」