您现在的位置是:首页 > 编程 > 

platform架构驱动简单示例+dts

2025-07-22 06:18:06
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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1165594.html

相关标签:无
上传时间: 2025-07-21 02:21:28
留言与评论(共有 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"