侵权投诉

Linux驱动中的platform总线详解

Linux爱好者 2021-02-26 14:02 次阅读

platform总线是学习linux驱动必须要掌握的一个知识点。

一、概念

嵌入式系统中有很多的物理总线:I2c、SPIUSBuart、PCIE、APB、AHB

linux从2.6起就加入了一套新的驱动管理和注册的机制platform平台总线,是一条虚拟的总线,并不是一个物理的总线。

相比 PCI、USB,它主要用于描述SOC上的片上资源。platform 所描述的资源有一个共同点:在CPU 的总线上直接取址。

平台设备会分到一个名称(用在驱动绑定中)以及一系列诸如地址和中断请求号(IRQ)之类的资源。

设备用platform_device表示,驱动用platform_driver进行注册。

与传统的bus/device/driver机制相比,platform由内核进行统一管理,在驱动中使用资源,提高了代码的安全性和可移植性。

二、platform

1. platform总线两个最重要的结构体

platform维护的所有的驱动都必须要用该结构体定义:

platform_driver

struct platform_driver {

int (*probe)(struct platform_device *); //

int (*remove)(struct platform_device *);

void (*shutdown)(struct platform_device *);

int (*suspend)(struct platform_device *, pm_message_t state);

int (*resume)(struct platform_device *);

struct device_driver driver;

const struct platform_device_id *id_table;

bool prevent_deferred_probe;

};

该结构体,用于注册驱动到platform总线,

成员含义

probe当驱动和硬件信息匹配成功之后,就会调用probe函数,驱动所有的资源的注册和初始化全部放在probe函数中

remove硬件信息被移除了,或者驱动被卸载了,全部要释放,释放资源的操作就放在该函数中

struct device_driver driver内核维护的所有的驱动必须包含该成员,通常driver-》name用于和设备进行匹配

const struct platform_device_id *id_table往往一个驱动可能能同时支持多个硬件,这些硬件的名字都放在该结构体数组中

我们编写驱动的时候往往需要填充以上几个成员

platform_device

platform总线用于描述设备硬件信息的结构体,包括该硬件的所有资源(io,memory、中断、DMA等等)。

struct platform_device {

const char *name;

int id;

bool id_auto;

struct device dev;

u32 num_resources;

struct resource *resource;

const struct platform_device_id *id_entry;

/* MFD cell pointer */

struct mfd_cell *mfd_cell;

/* arch specific additions */

struct pdev_archdata archdata;

};

成员含义

const char*name设备的名字,用于和驱动进行匹配的

struct devicedev内核中维护的所有的设备必须包含该成员,

u32num_resources资源个数

struct resource*resource描述资源

struct devicedev-》release()必须实现,

其中描述硬件信息的成员struct resource

0x139d0000

struct resource {

resource_size_t start; //表示资源的起始值,

resource_size_t end; //表示资源的最后一个字节的地址, 如果是中断,end和satrt相同

const char *name; // 可不写

unsigned long flags; //资源的类型

struct resource *parent, *sibling, *child;

};

flags的类型说明

#define IORESOURCE_MEM 0x00000200 //内存

#define IORESOURCE_IRQ 0x00000400 //中断

内核管理的所有的驱动,都必须包含一个叫struct device_driver成员, //男性描述的硬件,必须包含struct device结构体成员。 //女性

struct device_driver {

const char *name;

struct bus_type *bus;

struct module *owner;

const char *mod_name; /* used for built-in modules */

bool suppress_bind_attrs; /* disables bind/unbind via sysfs */

const struct of_device_id *of_match_table;

const struct acpi_device_id *acpi_match_table;

int (*probe) (struct device *dev);

int (*remove) (struct device *dev);

void (*shutdown) (struct device *dev);

int (*suspend) (struct device *dev, pm_message_t state);

int (*resume) (struct device *dev);

const struct attribute_group **groups;

const struct dev_pm_ops *pm;

struct driver_private *p;

};

其中:

const char *name;

用于和硬件进行匹配。

内核描述硬件,必须包含struct device结构体成员:

struct device {

struct device *parent;

struct device_private *p;

struct kobject kobj;

const char *init_name; /* initial name of the device */

const struct device_type *type;

struct mutex mutex; /* mutex to synchronize calls to

* its driver.

*/

struct bus_type *bus; /* type of bus device is on */

struct device_driver *driver; /* which driver has allocated this

device */

void *platform_data; /* Platform specific data, device

core doesn‘t touch it */

struct dev_pm_info power;

struct dev_pm_domain *pm_domain;

#ifdef CONFIG_PINCTRL

struct dev_pin_info *pins;

#endif

#ifdef CONFIG_NUMA

int numa_node; /* NUMA node this device is close to */

#endif

u64 *dma_mask; /* dma mask (if dma’able device) */

u64 coherent_dma_mask;/* Like dma_mask, but for

alloc_coherent mappings as

not all hardware supports

64 bit addresses for consistent

allocations such descriptors. */

struct device_dma_parameters *dma_parms;

struct list_head dma_pools; /* dma pools (if dma‘ble) */

struct dma_coherent_mem *dma_mem; /* internal for coherent mem

override */

#ifdef CONFIG_DMA_CMA

struct cma *cma_area; /* contiguous memory area for dma

allocations */

#endif

/* arch specific additions */

struct dev_archdata archdata;

struct device_node *of_node; /* associated device tree node */

struct acpi_dev_node acpi_node; /* associated ACPI device node */

dev_t devt; /* dev_t, creates the sysfs “dev” */

u32 id; /* device instance */

spinlock_t devres_lock;

struct list_head devres_head;

struct klist_node knode_class;

struct class *class;

const struct attribute_group **groups; /* optional groups */

void (*release)(struct device *dev);

struct iommu_group *iommu_group;

bool offline_disabled:1;

bool offline:1;

};

其中:

void (*release)(struct device *dev);

不能为空。

2. 如何注册

要用注册一个platform驱动的步骤

1)注册驱动platform_device_register

/**

* platform_device_register - add a platform-level device

* @pdev: platform device we’re adding

*/

int platform_device_register(struct platform_device *pdev)

{

device_initialize(&pdev-》dev);

arch_setup_pdev_archdata(pdev);

return platform_device_add(pdev);

}

2) 注册设备platform_driver_register

#define platform_driver_register(drv)

__platform_driver_register(drv, THIS_MODULE)

三、举例

1. 开发步骤

platform 总线下驱动的开发步骤是:

设备

需要实现的结构体是:platform_device 。

1)初始化 resource 结构变量

2)初始化 platform_device 结构变量

3)向系统注册设备:platform_device_register。

以上三步,必须在设备驱动加载前完成,即执行platform_driver_register()之前,原因是驱动注册时需要匹配内核中所有已注册的设备名。

platform_driver_register()中添加device到内核最终还是调用的device_add函数。

Platform_device_add和device_add最主要的区别是多了一步insert_resource(p, r),即将platform资源(resource)添加进内核,由内核统一管理。

驱动

驱动注册中,需要实现的结构体是:platform_driver 。

在驱动程序的初始化函数中,调用了platform_driver_register()注册 platform_driver 。

需要注意的是:platform_driver 和 platform_device 中的 name 变量的值必须是相同的【在不考虑设备树情况下,关于设备树,后面会写新的文章详细讲述】 。

这样在 platform_driver_register() 注册时,会将当前注册的 platform_driver 中的 name 变量的值和已注册的所有 platform_device 中的 name 变量的值进行比较,只有找到具有相同名称的 platform_device 才能注册成功。

当注册成功时,会调用 platform_driver 结构元素 probe 函数指针。

实例1

本例比较简单,只用于测试platform_driver 和platform_device是否可以匹配成功。

aff17dee-77ba-11eb-8b86-12bb97331649.png

左边是platform_device结构体注册的代码,右边是platform_driver结构体注册的代码。

platform_driver 定义和注册:

1 #include 《linux/init.h》

2 #include 《linux/module.h》

3 #include 《linux/platform_device.h》

4 #include 《linux/ioport.h》

5

6 static int hello_probe(struct platform_device *pdev)

7 {

8 printk(“match ok

”);

9 return 0;

10 }

11 static int hello_remove(struct platform_device *pdev)

12 {

13 printk(“hello_remove

”);

14 return 0;

15 }

16 static struct platform_driver hello_driver =

17 {

18 .probe = hello_probe,

19 .driver.name = “duang”,

20 .remove = hello_remove,

21 };

22 static int hello_init(void)

23 {

24 printk(“hello_init

”);

25 return platform_driver_register(&hello_driver);

26 }

27 static void hello_exit(void)

28 {

29 printk(“hello_exit

”);

30 platform_driver_unregister(&hello_driver);

31 return;

32 }

33 MODULE_LICENSE(“GPL”);

34 module_init(hello_init);

35 module_exit(hello_exit);

platform_device定义和注册:

1 #include 《linux/init.h》

2 #include 《linux/module.h》

3 #include 《linux/platform_device.h》

4 #include 《linux/ioport.h》

5

6 static void hello_release(struct device *dev)

7 {

8 return;

9 }

10 static struct platform_device hello_device =

11 {

12 .name = “duang”,

13 .id = -1,

14 .dev.release = hello_release,

15 };

16

17

18 static int hello_init(void)

19 {

20 printk(“hello_init

”);

21 return platform_device_register(&hello_device);

22

23 }

24 static void hello_exit(void)

25 {

26 printk(“hello_exit

”);

27 platform_device_unregister(&hello_device);

28 return;

29 }

30 MODULE_LICENSE(“GPL”);

31 module_init(hello_init);

32 module_exit(hello_exit);

该程序只用于测试platform框架是否可以成功匹配,struct platform_device hello_device 并没有设置任何硬件信息。

Makfile

1 ifneq ($(KERNELRELEASE),)

2 obj-m:=device.o driver.o

3 else

4 KDIR :=/lib/modules/$(shell uname -r)/build

5 PWD :=$(shell pwd)

6 all:

7 make -C $(KDIR) M=$(PWD) modules

8 clean:

9 rm -f *.ko *.o *.mod.o *.symvers *.cmd *.mod.c *.order

10 endif

该makefile可以同时将两个C文件编译成ko文件。

编译:

b06fcbfe-77ba-11eb-8b86-12bb97331649.png

编译

编译生成的文件:

b0f08622-77ba-11eb-8b86-12bb97331649.png

在这里插入图片描述

加载模块

清空log信息

sudo dmesg -c

b1456944-77ba-11eb-8b86-12bb97331649.png

匹配成功

实例2

给结构体platform_device 增加硬件信息,并在内核中能够读取出来。本例向结构体hello_device 增加信息如下:

基址寄存器地址0x139d0000,该地址的空间是0x4

中断号199【注意】实际的内核中会把外设的中断号根据HW id(通常soc厂商设备soc的时候会给每一个中断源定义好唯一的ID)计算出一个新的中断号,该中断号会被cpu所识别。

device.c

struct resource res[]={

[0] ={

.start = 0x139d0000,

.end = 0x139d0000 + 0x3,

.flags = IORESOURCE_MEM,

},

[1] ={

.start = 199,

.end = 199,

.flags = IORESOURCE_IRQ,

},

};

static struct platform_device hello_device =

{

.name = “duang”,

.id = -1,

.dev.release = hello_release,

.num_resources = ARRAY_SIZE(res),

.resource = res,

};

driver.c

static int hello_probe(struct platform_device *pdev)

{

printk(“match ok

”);

printk(“mem = %x

”,pdev-》resource[0].start);

printk(“irq = %d

”,pdev-》resource[1].start);

//注册中断、申请内存

return 0;

}

重新编译,卸载第一个例子的模块,并清除log:

make

sudo rmmod device

sudo rmmod driver

sudo dmesg -c

执行

b19c51d2-77ba-11eb-8b86-12bb97331649.png

由结果可知,probe函数正确读取到了硬件信息。

四、platform_device是如何管理的?

1. 没有设备树

在没有设备树的时候,以三星Cortex-A8 s5pc100为例,硬件信息放在以下位置

archarmmach-s5pc100Mach-smdkc100.c

archarmplat-samsung

b1d2fea8-77ba-11eb-8b86-12bb97331649.png

注册platform_device

b20948fa-77ba-11eb-8b86-12bb97331649.png

platform_device定义

该数组存放了,内核启动需要初始化的硬件的信息。

2. 如果有设备树

内核会有设备初始化的完整代码,会在内核启动的时候把设备树信息解析初始化,把硬件信息初始化到对应的链表中。在总线匹配成功后,会把硬件的信息传递给probe()函数。

四、总线相关的其他的知识点

1. 内核总线相关结构体变量

内核维护的所有的总线都需要用以下结构体注册一个变量。

struct bus_type {

const char *name;

const char *dev_name;

struct device *dev_root;

struct device_attribute *dev_attrs; /* use dev_groups instead */

const struct attribute_group **bus_groups;

const struct attribute_group **dev_groups;

const struct attribute_group **drv_groups;

int (*match)(struct device *dev, struct device_driver *drv);

int (*uevent)(struct device *dev, struct kobj_uevent_env *env);

int (*probe)(struct device *dev);

int (*remove)(struct device *dev);

void (*shutdown)(struct device *dev);

int (*online)(struct device *dev);

int (*offline)(struct device *dev);

int (*suspend)(struct device *dev, pm_message_t state);

int (*resume)(struct device *dev);

const struct dev_pm_ops *pm;

struct iommu_ops *iommu_ops;

struct subsys_private *p;

struct lock_class_key lock_key;

};

platform总线变量的定义struct bus_type platform_bus_type定义如下:

struct bus_type platform_bus_type = {

.name = “platform”,

.dev_groups = platform_dev_groups,

.match = platform_match,

.uevent = platform_uevent,

.pm = &platform_dev_pm_ops,

};

其中最重要的成员是**.match**。

当有设备的硬件信息注册到platform_bus_type 总线的时候,会遍历所有platform总线维护的驱动,通过名字来匹配,如果相同,就说明硬件信息和驱动匹配,就会调用驱动的platform_driver -》probe函数,初始化驱动的所有资源,让该驱动生效。

当有设备的驱动注册到platform_bus_type 总线的时候,会遍历所有platform总线维护的硬件信息,通过名字来匹配,如果相同,就说明硬件信息和驱动匹配,就会调用驱动的platform_driver -》probe函数,初始化驱动的所有资源,让该驱动生效。

注册位置

driversasePlatform.c

b239a98c-77ba-11eb-8b86-12bb97331649.png

platform_bus_type的注册

五、注册代码流程详解

捋架构的好处,就是可以帮助我们定位问题

1. match函数何时被调用到?

2. probe函数何时被调用到

以下是上述两个问题代码的调用流程:

b2a6ad52-77ba-11eb-8b86-12bb97331649.png

代码调用流程

原文标题:手把手教 Linux 驱动 10-platform 总线详解

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

原文标题:手把手教 Linux 驱动 10-platform 总线详解

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

蓝星科技嵌入式基础软件产品介绍

当前,智能化技术发展迅猛,各行各业向智能化、数字化转型已成为市场趋势,相关基础软件生态圈对于企业智能....
发表于 04-17 10:09 81次 阅读
蓝星科技嵌入式基础软件产品介绍

蓝星科技:致力于基础软件生态建设,助力国产芯片发展

随着中美贸易战的爆发,美国一度禁止芯片制造商向以华为为代表的中国企业出售相关芯片产品,阻挠正常贸易合....
发表于 04-17 10:04 80次 阅读
蓝星科技:致力于基础软件生态建设,助力国产芯片发展

可解决ASP下载器在win系统中问题的驱动器

可解决ASP下载器在win系统中问题的驱动器
发表于 04-17 09:37 6次 阅读
可解决ASP下载器在win系统中问题的驱动器

CH340驱动包分享

CH340驱动包分享免费下载。
发表于 04-16 09:34 11次 阅读
CH340驱动包分享

浅析Linux控制台、终端与shell之间的关系

当使用Linux时,我们经常会遇到终端和外壳程序的概念。 例如,在桌面版Ubuntu中,我们可以右键....
的头像 beanxyy 发表于 04-15 15:57 112次 阅读
浅析Linux控制台、终端与shell之间的关系

Linux常用C函数库电子版下载

你好!本人有幸在坊间得到一名为“Linux C 函数参考”的文本文件,并在此基础重新排版并制成htm....
发表于 04-15 09:33 9次 阅读
Linux常用C函数库电子版下载

请问LabVIEW 2010助力性能是怎样提高的?

LabVIEW 2010编译器是如何进行优化的? LabVIEW 2010内置的定时和同步是怎样被引入的? LabVIEW 2010社区驱动...
发表于 04-15 07:08 0次 阅读
请问LabVIEW 2010助力性能是怎样提高的?

八缓冲器/线路驱动器AiP74HC规格说明书

  AiP74HC/HCT244是一个8位缓冲器/线路驱动器,具有3态输出。该设备可以用作两个4位缓....
发表于 04-14 10:07 20次 阅读
八缓冲器/线路驱动器AiP74HC规格说明书

请问如何利用DDX音频放大器进行产品设计和开发?

DDX音频放大器主要包括哪几部分? DDX音频放大器驱动方式和调制方式是什么? DDX音频放大器种类有哪些? 以STA32...
发表于 04-14 07:03 0次 阅读
请问如何利用DDX音频放大器进行产品设计和开发?

OrangePi Zero开发板的WiFi连接测试

注意:不要通过修改/etc/network/interfaces 配置文件的方式来连接 WIFI,通过这种 方式连接 WIFI 网络使用会有问题!1....
发表于 04-13 20:07 0次 阅读
OrangePi Zero开发板的WiFi连接测试

关于Joplin的简介与应用及使用

Joplin是一个免费的开源笔记记录和待办事项应用程序,可以直接从应用程序或文本编辑器中进行复制,标....
的头像 Linux爱好者 发表于 04-13 11:32 231次 阅读
关于Joplin的简介与应用及使用

linux中的core dump调试与运用详解

调试,是开发流程中一个非常重要的环节。每个程序员都应,具备调试代码的能力,尤其对于从事 Linux ....
的头像 Linux爱好者 发表于 04-12 14:24 103次 阅读
linux中的core dump调试与运用详解

关于Linux的自动化小技巧详解

开机启动应该是我们很经常的需求了,我们常需要在开机时就自动执行某些命令来开启服务,进程等,有了它我们....
的头像 Linux爱好者 发表于 04-12 13:38 110次 阅读
关于Linux的自动化小技巧详解

Linux系统是什么,它的应用都有哪些

Linux是什么系统,有什么应用? Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统....
发表于 04-12 10:42 41次 阅读
Linux系统是什么,它的应用都有哪些

为开源新时代赋能 2021开源科技节完美落幕

“开源科技节”由开源科技OSTech、Linux Foundation、华为、腾讯开源联盟、腾讯云、....
的头像 章鹰 发表于 04-12 10:18 2588次 阅读
为开源新时代赋能 2021开源科技节完美落幕

Enclustra瑞苏盈科:航天发射数据记录仪

在这种情况下,基于FPGA的解决方案的优点(如固有的并行性、极高的带宽、灵活性、对广泛接口的支持以及....
发表于 04-12 10:06 712次 阅读
Enclustra瑞苏盈科:航天发射数据记录仪

Linux系统中的进程之间通信

一、Linux 系统中的进程之间通信(IPC) 二、基于 Socket 通信的优点 三、MQTT 消....
的头像 玩转单片机 发表于 04-12 10:06 216次 阅读
Linux系统中的进程之间通信

浅析物理内存与虚拟内存的关系及其管理机制

本文主要介绍内存管理机制:物理内存与虚拟内存的关系,Linux内存管理机制,Python内存管理机制....
的头像 Linux爱好者 发表于 04-12 09:55 188次 阅读
浅析物理内存与虚拟内存的关系及其管理机制

ControlLogix系统使用规格说明书下载

ControlLogix系统提供离散、驱动、运动、过程和安全控制,以及通信和最先进的I/O,这些都在....
发表于 04-11 09:28 14次 阅读
ControlLogix系统使用规格说明书下载

基于Linux平台和嵌入式控制计算机实现排爆机器人控制系统的设计

排爆机器人属于搬运机器人的一种类型,很多搬运机器人是模仿人类的动作,用来帮助或部分代替人来进行繁重、....
的头像 电子设计 发表于 04-11 09:06 2106次 阅读
基于Linux平台和嵌入式控制计算机实现排爆机器人控制系统的设计

如何配置WindowsCE内核及加载自己的驱动

如何配置WindowsCE内核及加载自己的驱动。
发表于 04-10 10:10 18次 阅读
如何配置WindowsCE内核及加载自己的驱动

如何在Vmware虚拟机上搭建Ubuntu Linux开发环境详解

对于刚接触嵌入式 Linux 系统开发的同学来说,搭建开发环境是一个不小的挑战,我看到过很多在入门边....
的头像 FPGA之家 发表于 04-09 17:44 529次 阅读
如何在Vmware虚拟机上搭建Ubuntu Linux开发环境详解

高调光比LED降压恒流驱动器PT4115

  PT4115是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LEDPT4115输入....
发表于 04-09 15:26 33次 阅读
高调光比LED降压恒流驱动器PT4115

ARM处理器和嵌入式Linux技术综述

ARM处理器和嵌入式Linux技术综述说明。
发表于 04-09 09:22 43次 阅读
ARM处理器和嵌入式Linux技术综述

对10个常见的 Linux终端仿真器详细解答

默认情况下,所有的 Linux 发行版都已经预装了“终端terminal”应用程序或“终端仿真器te....
的头像 Linux爱好者 发表于 04-08 14:12 128次 阅读
对10个常见的 Linux终端仿真器详细解答

基于Linux和RT—Linux实现实时机器人控制系统的设计

实时系统是能够在确定的时间内执行计算或处理事务并对外部事件作出响应的计算机系统。对工业机器人控制来说....
的头像 电子设计 发表于 04-08 09:42 2670次 阅读
基于Linux和RT—Linux实现实时机器人控制系统的设计

7.0V单通道直流电机驱动集成电路FH8118

FH8118是一款为低输入电压下工作的系统而设计的直流电机驱动集成电路,单通道低导通电阻。具备电机正....
发表于 04-08 09:19 36次 阅读
7.0V单通道直流电机驱动集成电路FH8118

探究USB-Host的大容量数据采集系统的设计

CH375S,USB-Host,数据采集系统,Mass-Storage类,FAT16文件系统
的头像 电子发烧友网工程师 发表于 04-07 17:58 167次 阅读
探究USB-Host的大容量数据采集系统的设计

Linux_Kernel_Developments内核开发

Linux_Kernel_Developments内核开发详细说明。
发表于 04-07 14:27 15次 阅读
Linux_Kernel_Developments内核开发

安装Cadence IC617+MMSIM151+Calibre的IC设计环境

安装Cadence IC617+MMSIM151+Calibre的IC设计环境
发表于 04-07 09:08 20次 阅读
安装Cadence IC617+MMSIM151+Calibre的IC设计环境

如何使用 开源硬件Banana PI BPI-R2's GPIO-s

BPI-R2集成MTK7623N 四核 ARM Cortex-A7 MP 支持主频1.3 ghz,BPI-R2 路由器提供丰富各种外设接口,包括 HDM...
发表于 04-06 19:27 0次 阅读
如何使用 开源硬件Banana PI BPI-R2's GPIO-s

21个使用Linux的不同理由分享

Linux 让你能够选择你喜欢的终端界面,而不是它强加的界面。 在 2021 年,人们喜欢 Linu....
的头像 Linux爱好者 发表于 04-06 16:41 320次 阅读
21个使用Linux的不同理由分享

Linux下最常用命令之一copy引发的思考

cp 引发的思考 cp 是啥 ? 是的,就是 Linux 是 Linux 下最常用的命令之一,cop....
的头像 Linux爱好者 发表于 04-06 16:36 292次 阅读
Linux下最常用命令之一copy引发的思考

Linux中epoll是如何实现IO多路复用的?

进程在 Linux 上是一个开销不小的家伙,先不说创建,光是上下文切换一次就得几个微秒。所以为了高效....
的头像 Linux爱好者 发表于 04-06 16:25 279次 阅读
Linux中epoll是如何实现IO多路复用的?

香橙派OrangePi zero2开发板连接3.5寸SPI LCD显示屏的操作步骤

Orange Pi Zero2开发板是一款采用全志H616高性能处理器,支持安卓10和Linux操作系统,集成千兆以太网、蓝牙5.0+双频WiFi、...
发表于 04-06 16:24 202次 阅读
香橙派OrangePi zero2开发板连接3.5寸SPI LCD显示屏的操作步骤

Armlinux内核移植及系统初始化过程分析

Armlinux内核移植及系统初始化过程分析说明。
发表于 04-06 15:53 31次 阅读
Armlinux内核移植及系统初始化过程分析

【电子书】Linux内核源代码情景分析-(上册+下册)

很详细的Linux内核源代码学习资料,1500+页全面的嵌入式资料。 ...
发表于 04-06 14:42 0次 阅读
【电子书】Linux内核源代码情景分析-(上册+下册)

【电子书】Linux内核完全注释PDF档

通过有限的篇幅,对完整Linux内核源代码进行解剖,以获得对操作系统基本功能、实际实现方式获得全方位的理解。 ...
发表于 04-06 14:34 0次 阅读
【电子书】Linux内核完全注释PDF档

基于TMS320DM6446ZWT评估板和Linux实现车道偏离预警系统的设计

使用Sobel算子边缘检测和最大类间方差图像分割法将道路灰度图像转化为二值图像,作为下一步处理的基础....
的头像 电子设计 发表于 04-06 13:51 326次 阅读
基于TMS320DM6446ZWT评估板和Linux实现车道偏离预警系统的设计

详谈Linux系统之实时监控相关技术

万物互联和大数据技术的发展,让我们的生活更加活色生香,其背后离不开安全、稳定可靠的服务器系统。
发表于 04-05 17:09 221次 阅读
详谈Linux系统之实时监控相关技术

【电子书】Linux命令速查手册PDF

本书以目前最热门的Linux发行版——Ubuntu为平台,从零开始循序渐进地介绍了Linux系统的基础知识和实用操作。 ...
发表于 04-02 14:05 0次 阅读
【电子书】Linux命令速查手册PDF

【电子书】Linux就该这么学PDF

本书基于最新的Linux系统RHEL7编写,从零基础带领大家入门Linux系统,配套大量的图表、命令示例及课后练习。 ...
发表于 04-02 14:01 0次 阅读
【电子书】Linux就该这么学PDF

【干货】Linux从入门到精通-PPT课程讲义

超级详细的嵌入式Linux系统入门教程。课程资料共包含29个章节,具体如下: 第1章  Linux概述 第2章  ...
发表于 04-02 13:56 0次 阅读
【干货】Linux从入门到精通-PPT课程讲义

嵌入式开发中的几种常用的工具介绍

嵌入式开发中常用的虚拟机与容器 1.本文说明 2.VMware Workstatio 2.Oracl....
的头像 嵌入式IoT 发表于 04-02 10:05 173次 阅读
嵌入式开发中的几种常用的工具介绍

如何处理SAMA5x上的USB暂停模式

本应用笔记介绍了 SAMA5x 系列微处理器中的 USB 暂停工作模式。本文档演示了 USB 暂停功....
发表于 04-01 10:21 63次 阅读
如何处理SAMA5x上的USB暂停模式

每天一个Linux命令小常识:tmpwatch 命令

执行tmpwatch指令可删除不必要的暂存文件,您可以设置文件超期时间,单位以小时计算。
的头像 Linux爱好者 发表于 03-31 17:40 233次 阅读
每天一个Linux命令小常识:tmpwatch 命令

每天一个Linux命令小常识:updatedb 命令

updatedb 命令用来创建或更新 slocate/locate 命令所必需的数据库文件。
的头像 Linux爱好者 发表于 03-31 17:36 231次 阅读
每天一个Linux命令小常识:updatedb 命令

每天一个Linux命令小常识:rhmask 命令

执行 rhmask 指令可制作加密过的文件,方便用户在公开的网络上传输该文件,而不至于被任意盗用。
的头像 Linux爱好者 发表于 03-31 17:31 252次 阅读
每天一个Linux命令小常识:rhmask 命令

每天一个Linux命令小常识:colrm 命令

colrm指令从标准输入设备读取书记,转而输出到标准输出设备。如果不加任何参数,则该指令不会过滤任何....
的头像 Linux爱好者 发表于 03-31 17:27 234次 阅读
每天一个Linux命令小常识:colrm 命令

Linux三剑客之awk实战详解教程

awk 强大的功能,是一般 Linux 命令无法比拟的。在本文中,我不会告诉你 awk 也是一种编程....
的头像 Linux爱好者 发表于 03-31 17:12 204次 阅读
Linux三剑客之awk实战详解教程

Linux操作系统之C语言编程入门电子版下载

本章介绍在LINUX 下进行C 语言编程所需要的基础知识。
发表于 03-31 16:45 49次 阅读
Linux操作系统之C语言编程入门电子版下载

关于Linux三剑客之grep实战示例详细教程讲解

grep 命令是一种强大的文本搜索工具,它能使用正则表达式,按照指定的模式去匹配,并把匹配的行打印出....
的头像 Linux爱好者 发表于 03-31 16:43 197次 阅读
关于Linux三剑客之grep实战示例详细教程讲解

分析Linux操作系统的内存

前言:在Linux上不像在Windows上看内存那样方便,而且还有Swap这个新的概念,所以知道如何....
的头像 电子发烧友网工程师 发表于 03-31 16:43 141次 阅读
分析Linux操作系统的内存

ARM处理器和嵌入式Linux技术综述电子版下载

本书包括了当前硬件、软件方面的两个流行趋势,一个是32位微控制器ARM,一个是嵌入式操作系统Linu....
发表于 03-31 16:41 28次 阅读
ARM处理器和嵌入式Linux技术综述电子版下载

每天一个Linux小常识:patch命令

patch指令让用户利用设置修补文件的方式,修改,更新原始文件。
的头像 Linux爱好者 发表于 03-31 16:13 139次 阅读
每天一个Linux小常识:patch命令

这款电源芯片居然可用U6201直接替代!

电源芯片被称为“电子设备的灵魂”,几乎决定了所有电子设备的综合性能,而昂宝是我们国内的品牌电源芯片厂....
的头像 开关电源芯片 发表于 03-31 15:28 372次 阅读
这款电源芯片居然可用U6201直接替代!

预测操作系统市场分析与未来焦点的趋势

操作系统领域的市场竞争正在从产品领域转向服务领域,服务将成为操作系统提供商未来市场竞争的焦点。目前中....
的头像 电子发烧友网工程师 发表于 03-31 15:11 201次 阅读
预测操作系统市场分析与未来焦点的趋势

SAMA5D2低功耗模式实现

本应用笔记通过提供 Linux®和裸机软件示例以及硬件应用原理图来说明如何进入和退出 SAMA5D2....
发表于 03-31 11:50 21次 阅读
SAMA5D2低功耗模式实现

针对微处理器的Linux基础和解决方案

本应用笔记提供了使用 Linux 操作系统快速上手 Microchip 微处理器所需的所有信息,其中....
发表于 03-31 11:24 10次 阅读
针对微处理器的Linux基础和解决方案

如何在Linux下使用SAMA5D2 RTC

本应用笔记介绍如何在内核空间中使能 SAMA5D27 的内部实时时钟(Real Time Clock....
发表于 03-31 10:51 17次 阅读
如何在Linux下使用SAMA5D2 RTC

STSW-ILL003 STSW-ILL003HB LED无诊断 - 驱动程序

发表于 05-20 15:05 22次 阅读
STSW-ILL003 STSW-ILL003HB LED无诊断 - 驱动程序

MC74ACT86 四路2输入异或门

源/接收器24 mA 特性 三态输出驱动总线线路或缓冲存储器地址寄存器 输出源/汇24 mA ACT241具有TTL兼容输入 无铅封装可用* 电路图、引脚图和封装图
发表于 08-02 17:02 132次 阅读
MC74ACT86 四路2输入异或门

MC74ACT00 四路2输入与非门

T00 特性 输出驱动能力:+/- 24 mA 工作电压范围:2至6 V AC00; 4.5至5.5 ACT00 低输入电流:1μA CMOS器件的高抗噪性能 符合JEDEC标准第7A号要求 可提供无铅封装。 电路图、引脚图和封装图
发表于 08-02 17:02 40次 阅读
MC74ACT00 四路2输入与非门

NL17SV00 单路2输入与非门

00是采用0.35微米CMOS技术制造的2输入与非门,具有低至1.0伏的优异性能。该器件非常适合极高速和高驱动应用。此外,电路板空间的限制不再是限制因素。非常小的SOT-553使该设备适合最紧凑的设计和空间。 特性 极高速:1 nS(典型值)@V cc 3.3V 设计用于1.0伏至3.3伏的操作 过压容差(OVT)输入&输出 允许逻辑翻译 平衡?24 mA输出驱动@ 3.3伏 近零静态供电电流 超小型SOT-553,5引脚封装,仅1.6 x 1.6 mm英尺,1/3 SOT-23的占地面积 SOT-553封装中的所有器件均为固有的无铅** 应用 移动电话 数码相机 PDA 数字视频 电路图、引脚图和封装图...
发表于 08-02 04:02 118次 阅读
NL17SV00 单路2输入与非门

FT7511 带固定延迟和复位脉冲的复位定时器

是定时器,用于复位那些复位时间较长的移动设备。长时延迟可避免因意外按键所引起的非预期复位。它有7.5±20%秒的固定延迟.DSR引脚通过直接强制/ RST1低以便进行出厂测试实现了测试模式操作。 FT7511有一个输入,用于实现单按钮复位功能。该器件有一个带0.5mA下拉驱动的单漏极开路输出。 FT7511不工作时可以消耗最少量的I CC 电流,可在1.65V至5.0V的电源电压范围内工作。 特性 固定复位延迟:7.5秒 一个输入复位引脚 漏极开路输出引脚,带固定80ms脉冲■ 工作范围为1.8V至5.0V(T A = - 40°C至+ 85°C)■ 工作范围为1.7V至5.0V(T A = - 25°C至+ 85°C)■ 工作范围为1.65V至5.0V(T A = 0℃至+ 85℃)...
发表于 07-31 12:02 303次 阅读
FT7511 带固定延迟和复位脉冲的复位定时器

FT7521 带固定延迟和复位脉冲的复位定时器

是定时器,用于复位那些复位时间较长的移动设备。长时延迟可避免因意外按键所引起的非预期复位。它有7.5±20%秒的固定延迟.DSR引脚通过直接强制/ RST1低以便进行出厂测试,实现了测试模式操作。 FT7521具有一个用于单按钮复位功能的输入。该器件有一个带0.5mA下拉驱动的单漏极开路输出。 FT7521不工作消消的I CC 电流最少,它可在2.0V到5.0V的电源电压范围下工作。 特性 固定复位延时:7.5秒 一个输入复位引脚 具有固定400ms脉冲的漏极开路输出引脚 2.0 V到5.0 V工作电压...
发表于 07-31 12:02 101次 阅读
FT7521 带固定延迟和复位脉冲的复位定时器

FT3001 具有可配置延迟的复位定时器

是定时器,用于复位那些复位时间较长的移动设备。长时延迟可避免因意外按键所引起的非预期复位。通过配置DSR0引脚和DSR1引脚可选择四个定时器值。 FT3001有两个输入,用于单按钮或双按钮复位功能。该器件有两个输出:0.5mA驱动的推挽式输出和0.5mA下拉驱动的漏极开路输出。 FT3001不工作消耗的电源电流最少,它可在1.65V到5.0V电压范围的电源下工作。 应用 此产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
发表于 07-31 12:02 198次 阅读
FT3001 具有可配置延迟的复位定时器

FT8010 具有可配置延迟的复位定时器

是定时器,用于复位那些复位时间较长的移动设备。长时延迟可避免因意外按键所引起的非预期复位。可以通过硬接线DSR引脚选择两种延迟:7.5±20 %秒或11.25±20%秒。 FT8010有两个输入,用于单按钮或双按钮复位功能。该器件有两个输出:0.5mA驱动的推挽式输出和0.5mA下拉驱动的漏极端开路输出。 FT8010不工作时可以消耗最少量的I CC 电流,可在2.0V至5.0V的宽电源电压范围内工作。 特性 长延迟可配置为7.5或11.25秒 初级和次级输入重置引脚 推挽和开路漏极输出引脚 2.0V至5.0V工作 提供10引脚UMLP(1.4mm x 1.8mm)封装和8引脚MLP(2.0mm x 2.0mm)封装 应用 此产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
发表于 07-31 12:02 231次 阅读
FT8010 具有可配置延迟的复位定时器

FT10001 带固定延迟和复位脉冲的复位定时器

1是定时器,用于复位那些复位时间较长的移动设备。长时延迟可避免因意外按键所引起的非预期复位。它有0±20%秒的固定延迟.DSR引脚通过直接强制/ RST1低以便进行出厂测试实现了测试模式操作。 FT10001有一个输入,用于实现单按钮复位功能。该器件有一个带0.5mA下拉驱动的单漏极开路输出。 FT10001不工作时可以消耗最少量的I CC 电流,可在1.65V至5.00V的电源电压范围内工作。 应用 此产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
发表于 07-31 12:02 184次 阅读
FT10001 带固定延迟和复位脉冲的复位定时器

FT7522 带固定延迟和复位脉冲的复位定时器

是定时器,用于复位那些复位时间较长的移动设备。长时延迟可避免因意外按键所引起的非预期复位。它有7.5±20%秒的固定延迟.DSR引脚通过直接强制/ RST1低以便进行出厂测试实现了测试模式操作。 FT7522有一个输入,用于实现单按钮复位功能。该器件有一个带0.5mA下拉驱动的单漏极开路输出。 FT7522不工作时可以消耗最少量的I CC 电流,可在1.65V至5.0V的电源电压范围内工作。 应用 此产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
发表于 07-31 12:02 173次 阅读
FT7522 带固定延迟和复位脉冲的复位定时器

NCV8605 LDO稳压器 500 mA 低压差

5 / NCV8606在固定电压选项下提供超过500 mA的输出电流,或者在5.0 V至1.25 V范围内提供可调输出电压。这些器件专为空间受限和便携式电池供电应用而设计,并提供其他功能,如具有高PSRR,低噪声操作,短路和热保护。这些器件设计用于低成本陶瓷电容器,采用DFN6 3x3.3封装。 NCV8605的设计没有使能引脚,NCV8606设计有使能引脚。 特性 输出电压选项:可调,1.5 V,1.8 V,2.5 V,2.8 V, 3.0 V,3.3 V,5.0 V 外部电阻可调输出,从5.0 V降至1.25 V 电流限制675 mA 低I GND (独立于负载) 1.5%输出电压容差(可调) 在所有工作条件下2%输出电压容差(已修复) NCP605已修复直接替换LP8345 没有旁路电容的50 Vrms的典型噪声电压 增强型ESD额定值:4 kV人体模式(HBM) 400 V Machin e Model(MM) 应用 终端产品 电池电力电子设备 便携式仪器 硬盘驱动程序 笔记本电脑 电路图、引脚图和封装图...
发表于 07-30 19:02 157次 阅读
NCV8605 LDO稳压器 500 mA 低压差

NCP605 LDO稳压器 低熔断器 具有增强的ESD保护

/ NCP606低压降(LDO)线性稳压器在固定电压选项下提供超过500 mA的输出电流,或者在5.0 V至1.25 V范围内提供可调输出电压。这些器件专为空间受限和便携而设计电池供电的应用,并提供额外的功能,如高PSRR,低噪音操作,短路和热保护。这些器件设计用于低成本陶瓷电容器,采用DFN6 3x3.3封装。 NCP605的设计没有使能引脚,NCP606设计有使能引脚。 特性 输出电压选项:可调,1.5 V,1.8 V,2.5 V,2.8 V, 3.0 V,3.3 V,5.0 V 外部电阻可调输出,从5.0 V降至1.25 V 电流限制675 mA 低I GND (独立于负载) ±1.5%输出电压容差,适用于所有工作条件(可调) ±2%输出电压容差操作条件(固定) NCP605已修复直接替换LP8345 没有旁路电容的50μVrms的典型噪声电压 增强型ESD额定值:4 kV人体模式(HBM) 400 V Ma中文模型(MM) 这些是无铅设备 应用 终端产品 电池电力电子设备 便携式仪器 硬盘驱动程序 笔记本电脑 电路图、引脚图和封装图...
发表于 07-30 09:02 170次 阅读
NCP605 LDO稳压器 低熔断器 具有增强的ESD保护

AR1337 CMOS成像传感器 13 MP 采用SuperPD™PDAF技术

是一款采用SuperPD™PDAF技术的13万像素CMOS成像传感器。这款先进的传感器具有独特的PDAF微透镜和PDAF图案技术,在低光照条件下具有出色的自动对焦性能。采用1.1μm像素构建,提供符合行业标准的1 / 3.2“光学格式,使AR1337具有适合大批量设计的尺寸。图像质量由领先的量子效率和灵敏度驱动,同时保持低读取噪声。这种组合可在明亮的日光或低室内照明条件下提供出色的图像。 AR1337以每秒30帧的速度运行在13 MP,并支持每秒30帧的4k2k视频和高达每秒60帧的全高清1080P视频。 特性 优势 SuperPD™PDAF技术 领先的低光自动对焦性能 独特的PDAF图案和微透镜技术 高精度相位检测自动聚焦(PDAF)功能 片上坏像素校正和AF计算 简化的相机模块积分校准和与后端应用处理器的集成 具有低读取噪声的高量子效率和灵敏度 卓越的图像质量,尤其是在光线不足 应用 终端产品 智能手机相机 平板电脑相机 智能手机 平板电脑 电路图、引脚图和封装图...
发表于 07-29 17:02 417次 阅读
AR1337 CMOS成像传感器 13 MP 采用SuperPD™PDAF技术

HLMP-C625-P0002 T-13/4(5mm)AlInGaP灯

HLMP-C625是一款5毫米灯泡,专为需要非常高的轴上强度的应用而设计,这是标准灯无法实现的。该器件能够在很宽的驱动电流范围内产生光输出。采用AlInGaP技术制造,非常适合典型的5 mm Ts-AlGaAs灯应用,并且具有比大多数Ts-AlGaAs灯更高的可靠性。湿/热环境。这款灯具有清晰的非漫射镜头,采用光学设计,可提供出色的光输出。 特点 高强度 通用引线 红色,直径5 mm直径 可用于卷带 25度可视角度...
发表于 07-04 11:40 36次 阅读
HLMP-C625-P0002 T-13/4(5mm)AlInGaP灯

HLMP-C225-O00DD T-13/4(5mm)AlInGaP灯

HLMP-C225是一款5毫米灯泡,专为需要非常高的轴上强度的应用而设计,这是标准灯无法实现的。该器件能够在很宽的驱动电流范围内产生光输出。采用AlInGaP技术制造,非常适合典型的5 mm Ts-AlGaAs灯应用,并且具有比大多数Ts-AlGaAs灯更高的可靠性。湿/热环境。该灯具有透明的非漫射透镜,采用光学设计,可产生出色的光输出。 特点 高强度 通用引线 琥珀色直径5 mm Ammo Pack提供 25度可视角度...
发表于 07-04 11:40 28次 阅读
HLMP-C225-O00DD T-13/4(5mm)AlInGaP灯

HLMP-D101-J0002 T-13/4(5mm),高强度,双异质结AlGaAs红色LED灯

固态LED灯采用新开发的双异质结(DH)AlGaAs / GaAs材料技术。这种LED材料在很宽的驱动电流范围内具有出色的光输出效率。主波长为637纳米时,颜色为深红色。该灯可以是直流或脉冲驱动,以实现所需的光输出。 功能 卓越的亮度 宽视角角度 出色的材料效率 低正向电压 CMOS / MOS兼容 TTL兼容 深红颜色 可在卷带中使用
发表于 07-04 11:39 26次 阅读
HLMP-D101-J0002 T-13/4(5mm),高强度,双异质结AlGaAs红色LED灯

HLMP-K105 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

固态LED灯采用新开发的双异质结(DH)AlGaAs / GaAs材料技术。这种LED材料在很宽的驱动电流范围内具有出色的光输出效率。主波长为637纳米时,颜色为深红色。该灯可以是直流或脉冲驱动,以实现所需的光输出。 功能 卓越的亮度 宽视角角度 出色的材料效率 低正向电压 CMOS / MOS兼容 TTL兼容 深红流行的T-1包装颜色 批量供货
发表于 07-04 11:37 88次 阅读
HLMP-K105 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

HLMP-K101-I0002 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

固态LED灯采用新开发的双异质结(DH)AlGaAs / GaAs材料技术。这种LED材料在很宽的驱动电流范围内具有出色的光输出效率。主波长为637纳米时,颜色为深红色。该灯可以是直流或脉冲驱动,以实现所需的光输出。 功能 卓越的亮度 宽视角角度 出色的材料效率 低正向电压 CMOS / MOS兼容 TTL兼容 深红流行的T-1包装中的颜色 以卷带和卷轴提供
发表于 07-04 11:34 66次 阅读
HLMP-K101-I0002 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

HLMP-K101 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

固态LED灯采用新开发的双异质结(DH)AlGaAs / GaAs材料技术。这种LED材料在很宽的驱动电流范围内具有出色的光输出效率。主波长为637纳米时,颜色为深红色。该灯可以是直流或脉冲驱动,以实现所需的光输出。   功能 卓越的亮度 宽视角 出色的材料效率 低正向电压 CMOS / MOS兼容 TTL兼容 流行的T-1包装中的深红色 可以批量提供
发表于 07-04 11:34 131次 阅读
HLMP-K101 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

HLMP-K105-J0002 T-1(3mm),高强度,双异质结AlGaAs红色LED灯

固态LED灯采用新开发的双异质结(DH)AlGaAs / GaAs材料技术。这种LED材料在很宽的驱动电流范围内具有出色的光输出效率。主波长为637纳米时,颜色为深红色。该灯可以是直流或脉冲驱动,以实现所需的光输出。 功能 卓越的亮度 宽视角角度 出色的材料效率 低正向电压 CMOS / MOS兼容 TTL兼容 深红流行的T-1包装中的颜色 以卷带和卷轴提供
发表于 07-04 09:43 94次 阅读
HLMP-K105-J0002 T-1(3mm),高强度,双异质结AlGaAs红色LED灯