浅析如何打印显示platform_bus_type总线上注册的所有设备信息
#include <linux/platform_device.h> typedef struct __luther_ss_fn { const char* name; int id; void** dev; }_luther_ss_fn; static int luther_gliethttp_get_platform_fn(struct device *dev, void *data) { struct platform_device* platform_device = container_of(dev, struct platform_device, dev); _luther_ss_fn *luther_ss_fn = data; //enum {name_match = 0x01,id_match = 0x02}; //int match = 0; printk(KERN_ALERT "%-20s %4d\n", platform_device->name, platform_device->id); if (luther_ss_fn->name) { if (strncmp(luther_ss_fn->name,platform_device->name, BUS_ID_SIZE)) return 0; } if (luther_ss_fn->id == platform_device->id) { if (luther_ss_fn->dev) *luther_ss_fn->dev = platform_device; } return 0; } void* luther_gliethttp_get_platform_device_by_id_name(const char *name, int id, void **dev) { _luther_ss_fn luther_ss_fn;
luther_ss_fn.name = name; luther_ss_fn.id = id; luther_ss_fn.dev = dev; if (dev) *dev = NULL;
bus_for_each_dev(&platform_bus_type, NULL, &luther_ss_fn, luther_gliethttp_get_platform_fn);
if ( luther_ss_fn.dev && *luther_ss_fn.dev) return ((struct platform_device* )(*luther_ss_fn.dev))->dev.driver_data; else return NULL; }
应用举例: static int wlan_init_module(void) { ... void *pmmc_host; pmmc_host = luther_gliethttp_get_platform_device_by_id_name("pxa2xx-mci", 1, &pmmc_host);//用来获取mmc控制器的控制结构体 mmc_detect_change(pmmc_host, 0); //立即执行mmc检测,如果sd设备移出,那么/sys/bus/sdio/devices下的设备文件将从sysfs文件系统中删除,否则,添加设备文件[luther.gliethttp] ... }
|
比如打印如下信息:
[ 602.274382] pxa930-acipc -1
[ 602.278075] pxa3xx-freq 0
[ 602.281889] pxa3xx-pmu 0
[ 602.285551] pxa2xx-fb -1
[ 602.289641] micco-bl -1
[ 602.293303] micco-kp-bl -1
[ 602.297514] micco-ts -1
[ 602.301176] pxa3xx-imm -1
[ 602.305266] micco-charger -1
[ 602.308928] pxa-ispt -1
[ 602.313078] gpio-keys -1
[ 602.316740] pxa2xx-uart 0
[ 602.320433] pxa2xx-uart 1
[ 602.324126] pxa2xx-uart 2
[ 602.327818] pxa3xx-keypad 0
[ 602.331969] pxa-leds -1
[ 602.335631] gpio_sleep_debug -1
[ 602.339751] onenand -1
[ 602.343413] pxa9xx-u2o -1
[ 602.347563] pxa3xx-camera -1
[ 602.351225] a3212_hall -1
[ 602.355376] pxa2xx-mci 0
[ 602.359068] pxa2xx-mci 1//获取该mmc host结构体
[ 602.363249] cm3601_alsps -1
[ 602.366911] pxa2xx-i2c 0
[ 602.371001] pxa2xx-i2s -1
[ 602.374663] pxa2xx-v4l2ov2 -1
[ 602.378813] pxa3xx-rtc -1
[ 602.382506] pxa3xx-otg -1
[ 602.386168] pxa27x-ssp 0
[ 602.389891] pxa27x-ssp 1
[ 602.393553] pxa27x-ssp 2
[ 602.397704] pxa27x-ssp 3
[ 602.401366] ds1wm -1
[ 602.405516] m2d -1
[ 602.409209] pxa3xx-mved -1
[ 602.413359] bluetooth -1
[ 602.417021] alarm -1
[ 602.421141] soc-audio -1
[ 602.424803] seh 0
[ 602.428954] msl 0
[ 602.432616] intel-ccidatastub 0
[ 602.436766] marvell-ccinet 0