自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 uboot_initf_dm

initf_dm 在代码重定位之前运行.dm_init_and_scandm_initof_live == false;lists_driver_lookup_name遍历".u_boot_list_2_driver_1"和".u_boot_list_2_driver_3"这两个段中间,所有struct driver.所有struct driver定义时,就指定保存在这两个段中.宏定义展开后:定义_u_boot_list_2_driver_root_driver全局变量,保存在".u_

2022-07-01 13:33:06 301 1

原创 设备树生成platform_device过程

of_platform_default_populateof_platform_populate查找of_default_bus_match_table列表中compatible属性的节点,遍历其子节点,调用of_platform_bus_create.root等于NULL,从设备树根节点开始扫描.为当前设备树节点创建device, 并递归遍历子节点,同样创建device.没有compatible属性则忽略.分配内存,初始化并注册platform_device.status属性不为"oka

2022-07-01 13:31:33 756

原创 platform_driver注册过程

platform_driver注册过程.__platform_driver_register设置总线类型为platform_bus_type.设置platform函数操作集合.platform device 和 driver 配置成功会调用这个函数.根据设备树设置时钟.调用drv->probe.调用platform_match进行匹配,优先级如下:driver_find查看driver防止重复注册.driver_private分配内存,初始化,关联bus.driver_attach进行

2022-07-01 13:30:20 677

原创 linux驱动之platform

linux驱动之platform平台驱动注册#define platform_driver_register(drv) \ __platform_driver_register(drv, THIS_MODULE)int __platform_driver_register(struct platform_driver *drv, struct module *owner){ //THIS_MODULE代表模块自身 drv->driver.owner = owner; //平台

2021-07-19 20:09:55 284

原创 linux驱动之platform_bus_init-2

linux驱动之platform_bus_init() 2代码drivers/base/platform.c drivers/base/bus.c分析bus_register()int __init platform_bus_init(void){ int error; early_platform_cleanup(); error = device_register(&platform_bus); ... error = bus_register(&platform_b

2021-06-24 22:10:07 134

原创 linux驱动之platform_bus_init 1

linux驱动之platform_bus_init() 1代码drivers/base/platform.c drivers/base/core.c一般情况驱动开发device_register()和bus_register()都不用调用devices一般通过设备树机制,内核自动创建。而绝大部分bus,内核已经注册好了。先分析device_register()内核启动时注册platform总线int __init platform_bus_init(void){ int error; e

2021-06-24 22:08:33 190

原创 linux驱动之buses_init

linux驱动之buses_init()通过buses_init()分析一下kset,kobject代码:driver/base/bus.clib/kobject.c内核启动阶段,生成/sys/bus目录static struct kset *bus_kset;int __init buses_init(void){ bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL); ... return 0;}ks

2021-06-22 13:12:47 149

原创 linux驱动之open

linux驱动之openopen()系统调用->sys_open()SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode){ ... return do_sys_open(AT_FDCWD, filename, flags, mode);}long do_sys_open(int dfd, const char __user *filename, int flags, umode_t

2021-06-22 09:16:14 459

原创 linux驱动之cdev

linux驱动之cdev代码在fs/char_dev.clinux下每一个具体的字符设备都会对应一个cdev,cdev->ops就是设备的操作接口。上层应用程序调用open()系统调用打开/dev/xxx设备节点时,最终会调用cdev->ops->open()。struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head

2021-06-21 15:14:41 512

原创 linux驱动之__register_chrdev

linux驱动之__register_chrdev_region()代码在fs/char_dev.c//这个哈希表保存主次设备号static struct char_device_struct { struct char_device_struct *next; unsigned int major; unsigned int baseminor; int minorct; char name[64]; struct cdev *cdev; /* will die */} *chrde

2021-06-21 13:50:20 303

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除