platform架构驱动简单示例+dts
platform架构驱动简单示例+dts
platform.c代码语言:txt复制/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRATY OF AY KID, EXPRESS OR
* IMPLIED, ICLUDI
platform架构驱动简单示例+dts
代码语言:txt复制/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRATY OF AY KID, EXPRESS OR
* IMPLIED, ICLUDIG BUT OT LIMITED TO THE WARRATIES OF MERCHATABILITY,
* FITESS FOR A PARTICULAR PURPOSE AD OIFRIGEMET. I O EVET SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR AY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER I A ACTIO OF COTRACT, TORT OR OTHERWISE, ARISIG
* FROM, OUT OF OR I COECTIO WITH THE SOFTWARE OR THE USE OR OTHER DEALIGS
* I THE SOFTWARE.
*
* Copyright (C) 2024-2025 Jim Gao <gaozhsoft@aliyun>
*
*/
#include <linux/module.h>
#include <linux/version.h>
#include <linux/platform_device.h>
static int platform_drv_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
printk(KER_IFO "[%s +%d] start\n", __func__, __LIE__);
printk(KER_IFO "[%s +%d] dev->init_name=%s\n", __func__, __LIE__, dev->init_name);
printk(KER_IFO "[%s +%d] dev->driver->name=%s\n", __func__, __LIE__, dev->driver->name);
printk(KER_IFO "[%s +%d] end\n", __func__, __LIE__);
return 0;
}
static int platform_drv_remove(struct platform_device *pdev)
{
printk(KER_IFO "[%s +%d] start\n", __func__, __LIE__);
printk(KER_IFO "[%s +%d] end\n", __func__, __LIE__);
return 0;
}
static struct platform_driver platform_pdrv = {
.probe = platform_drv_probe,
.remove = platform_drv_remove,
.driver = {
.name = "platform_name",
},
};
static void platform_pdev_release(struct device *dev)
{
printk(KER_IFO "[%s +%d] start\n", __func__, __LIE__);
printk(KER_IFO "[%s +%d] end\n", __func__, __LIE__);
}
static struct platform_device platform_pdev = {
.name = "platform_name",
.dev.release = platform_pdev_release,
};
static int __init platform_drv_init(void)
{
int ret;
printk(KER_IFO "[%s +%d] start\n", __func__, __LIE__);
ret = platform_device_register(&platform_pdev);
if (ret)
return ret;
ret = platform_driver_register(&platform_pdrv);
if (ret)
platform_device_unregister(&platform_pdev);
printk(KER_IFO "[%s +%d] end\n", __func__, __LIE__);
return ret;
}
static void __exit platform_drv_exit(void)
{
printk(KER_IFO "[%s +%d] start\n", __func__, __LIE__);
platform_driver_unregister(&platform_pdrv);
platform_device_unregister(&platform_pdev);
printk(KER_IFO "[%s +%d] end\n", __func__, __LIE__);
}
module_init(platform_drv_init);
module_exit(platform_drv_exit);
MODULE_AUTHOR("Jim Gao <gaozhsoft@aliyun>");
MODULE_DESCRIPTIO("basic example for platform driver");
MODULE_LICESE("GPL v2");
Makefile
代码语言:txt复制###########
USE_MAKEFILE_DATE_TIME = y
ifeq ($(strip $(USE_MAKEFILE_DATE_TIME)),y)
EXTRA_CFLAGS += -Wno-error=date-time
EXTRA_CFLAGS += -Wno-date-time
EXTRA_CFLAGS += -DEABLE_MAKEFILE_DATE_TIME
endif
EXTRA_CFLAGS += -g
KEREL_DIR = /lib/modules/`uname -r`/build
MODULE_AME = platform_drv
obj-m := $(MODULE_AME).o
modules:
$(MAKE) -C $(KEREL_DIR) M=$(PWD) modules
clean distclean:
rm -f *.o *. .*.*.cmd *.ko .*.o.d *.mod
rm -rf .tmp_versi Module.symvers
insmod.sh
代码语言:txt复制#!/bin/sh
if [ ! -d /lib/modules/`uname -r`/extra ]; then
sudo mkdir /lib/modules/`uname -r`/extra
else
echo "/lib/modules/`uname -r`/extra File exists"
fi
echo "cp platform_drv.ko /lib/modules/`uname -r`/extra"
sudo cp platform_drv.ko /lib/modules/`uname -r`/extra
sudo depmod
echo "modprobe platform_drv"
sudo modprobe platform_drv
# disable autoload
vdrm_drvblack=$(grep -w platform_drv /etc/modprobe.d/)
if [ x"$vdrm_drvblack" = x"" ]
then
echo ' ' | sudo -S cp /etc/modprobe.d/ /etc/modprobe.d/.bak
echo "# Don't load platform_drv drv kernel module on boot" | sudo -S tee -a /etc/modprobe.d/
echo "blacklist platform_drv" | sudo -S tee -a /etc/modprobe.d/
echo ' ' | sudo -S depmod
echo ' ' | sudo -S ldconfig /usr/local/lib /usr/local/lib2
else
echo "platform_drv is already in blacklist"
fi
if [ ! -d /lib/modules/`uname -r`/extra ]; then
sudo mkdir /lib/modules/`uname -r`/extra
else
echo "/lib/modules/`uname -r`/extra File exists"
fi
rmmod.sh
代码语言:txt复制#!/bin/sh
echo "rmmod platform_drv"
rmmod platform_drv
x86上driver+device机制启动,dmesg log输出
代码语言:txt复制[ 216.298820] [platform_drv_init +61] start
[ 216.20064] [platform_drv_probe +2] start
[ 216.2007] [platform_drv_probe +24] dev->init_name=(null)
[ 216.20076] [platform_drv_probe +25] dev->driver->name=platform_name
[ 216.20079] [platform_drv_probe +27] end
[ 216.20191] [platform_drv_init +68] end
[ 218.88044] [platform_drv_exit +75] start
[ 218.880495] [platform_drv_remove +] start
[ 218.880498] [platform_drv_remove +4] end
[ 218.880689] [platform_pdev_release +49] start
[ 218.88069] [platform_pdev_release +50] end
[ 218.880698] [platform_drv_exit +78] end
arm64上driver+dts机制启动,C代码,drivers/usb/dwc/
代码语言:txt复制static int dwc_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct resource *res, dwc_res;
struct dwc_vendor *vdwc;
struct dwc *dwc;
int ret;
void __iomem *regs;
printk("[%s +%d %s] \n", __FILE__, __LIE__, __func__);
printk("[%s +%d %s] pdev->name=%s\n", __FILE__, __LIE__, __func__, pdev->name);
printk("[%s +%d %s] dev->driver->name=%s\n", __FILE__, __LIE__, __func__, dev->driver->name);
printk("[%s +%d %s] dev->driver->of_match_table->name=%s\n", __FILE__, __LIE__, __func__, dev->driver->of_match_table->name);
printk("[%s +%d %s] dev->driver->of_match_table->compatible=%s\n", __FILE__, __LIE__, __func__, dev->driver->of_match_table->compatible);
arm64上driver+dts机制启动,dts部分
代码语言:txt复制 usbdrd_0 {
compatible = "rockchip,rk588-dwc\0rockchip,rk99-dwc";
clocks = <0x02 0x1a 0x02 0x1a2 0x02 0x1a1>;
clock-names = "ref\0suspend\0bus";
#address-cells = <0x02>;
#size-cells = <0x02>;
ranges;
status = "okay";
phandle = <0x255>;
usb@fc000000 {
compatible = "snps,dwc";
reg = <0x00 0xfc000000 0x00 0x400000>;
interrupts = <0x00 0xdc 0x04>;
power-domains = <0x61 0x1f>;
resets = <0x02 0x2a4>;
reset-names = "usb-otg";
dr_mode = "otg";
phys = <0x67 0x68>;
phy-names = "usb2-phy\0usb-phy";
arm64上driver+dts机制启动,
dmesg log输出
代码语言:txt复制[ 4.8821] [drivers/usb/dwc/ +1582 dwc_probe]
[ 4.8825] [drivers/usb/dwc/ +158 dwc_probe] pdev->name=fc000000.usb
[ 4.8827] [drivers/usb/dwc/ +1584 dwc_probe] dev->driver->name=dwc
[ 4.880] [drivers/usb/dwc/ +1585 dwc_probe] dev->driver->of_match_table->name=
[ 4.88] [drivers/usb/dwc/ +1586 dwc_probe] dev->driver->of_match_table->compatible=snps,dwc
[ 4.886] [drivers/usb/dwc/ +1611 dwc_probe] dwc->xhci_resources[0].start=0x422785842
[ 4.8840] [drivers/usb/dwc/ +1612 dwc_probe] dwc->xhci_resources[0].end=0x4227891199
[ 4.8842] [drivers/usb/dwc/ +161 dwc_probe] dwc->xhci_resources[0].name=usb@fc000000
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-21 02:21:28
上一篇:AI英语单词APP的开发
下一篇:Go程序例子(68):目录
推荐阅读
留言与评论(共有 18 条评论) |
本站网友 sm是什么意思 | 5分钟前 发表 |
__func__ | |
本站网友 阿特金斯减肥 | 17分钟前 发表 |
__LIE__); ret = platform_device_register(&platform_pdev); if (ret) return ret; ret = platform_driver_register(&platform_pdrv); if (ret) platform_device_unregister(&platform_pdev); printk(KER_IFO "[%s +%d] end\n" | |
本站网友 武汉新世界国贸大厦 | 12分钟前 发表 |
__LIE__); ret = platform_device_register(&platform_pdev); if (ret) return ret; ret = platform_driver_register(&platform_pdrv); if (ret) platform_device_unregister(&platform_pdev); printk(KER_IFO "[%s +%d] end\n" | |
本站网友 客车票预订 | 30分钟前 发表 |
__func__ | |
本站网友 北京高端住宅 | 20分钟前 发表 |
GPL-2.0-or-later */ /* * THE SOFTWARE IS PROVIDED "AS IS" | |
本站网友 wannacry | 5分钟前 发表 |
dev->init_name); printk(KER_IFO "[%s +%d] dev->driver->name=%s\n" | |
本站网友 flv视频 | 23分钟前 发表 |
dwc_res; struct dwc_vendor *vdwc; struct dwc *dwc; int ret; void __iomem *regs; printk("[%s +%d %s] \n" | |
本站网友 哈尔滨租房网 | 16分钟前 发表 |
__LIE__); return 0; } static int platform_drv_remove(struct platform_device *pdev) { printk(KER_IFO "[%s +%d] start\n" | |
本站网友 中学生激吻 | 21分钟前 发表 |
EXPRESS OR * IMPLIED | |
本站网友 道学家 | 17分钟前 发表 |
y) EXTRA_CFLAGS += -Wno-error=date-time EXTRA_CFLAGS += -Wno-date-time EXTRA_CFLAGS += -DEABLE_MAKEFILE_DATE_TIME endif EXTRA_CFLAGS += -g KEREL_DIR = /lib/modules/`uname -r`/build MODULE_AME = platform_drv obj-m | |
本站网友 机器人资讯 | 13分钟前 发表 |
__LIE__); return 0; } static struct platform_driver platform_pdrv = { .probe = platform_drv_probe | |
本站网友 中国汽车质量网 | 27分钟前 发表 |
C代码 | |
本站网友 纹理图片 | 23分钟前 发表 |
dwc_res; struct dwc_vendor *vdwc; struct dwc *dwc; int ret; void __iomem *regs; printk("[%s +%d %s] \n" | |
本站网友 润肺的食物 | 24分钟前 发表 |
__LIE__); } static struct platform_device platform_pdev = { .name = "platform_name" | |
本站网友 生粉的作用 | 0秒前 发表 |
DAMAGES OR OTHER * LIABILITY | |
本站网友 周立波怎么了 | 4分钟前 发表 |
__func__ | |
本站网友 大荔县城关中学 | 11分钟前 发表 |
pdev->name); printk("[%s +%d %s] dev->driver->name=%s\n" |