首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【分享】i2c地址0x80导致Linux i2c驱动的probe函数不能被执行

作者: 付汉杰 hankf@xilinx.com hankf@amd.com 测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0 在给Xilinx Versal的Linux...检查编译过程,i2c驱动被编译成了ko文件。 检查编单板的文件系统,i2c驱动已经在文件系统中。 手动加载ko文件,linux报告驱动已经存在。...卸载驱动后,再手动加载ko文件,执行正常,linux没有报告错误。检查内核输出,没有probe里的printk打印,即使是err级别的打印信息。...交换能正常加载的i2c驱动和新驱动的i2c地址,新驱动的probe函数能被执行,原来能正常加载的i2c驱动的probe函数也不能被执行。这说明probe和地址有关。...检查linux内核信息,由警告说0x80是无效地址。 原来设备树根据厂商的手册,把i2c地址设置成了0x80。0x80可能是计算了r/w位的值,真实地址是0x40。

1.7K30
您找到你想要的搜索结果了吗?
是的
没有找到

虚拟- Linux系统配置静态IP地址

首先介绍一下虚拟网卡的几种模式 桥接模式 桥接模式就是将主机网卡与虚拟虚拟的网卡利用虚拟网桥进行通信。类似于把物理主机虚拟为一个交换机,相互可以访问而不干扰。...在桥接模式下,虚拟ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。...NAT(地址转换模式) 在NAT模式中,主机网卡直接与虚拟NAT设备相连,利用虚拟的NAT设备以及虚拟DHCP服务器来使虚拟连接外网。  ...仅主机模式 仅主机模式其实就是NAT模式去除了虚拟NAT设备,将虚拟与外网隔开,使得虚拟成为一个独立的系统,只与主机相互通讯。 简单了解一下NAT模式配置吧。...Linux系统配置静态IP地址 使用dhclient命令(dhclient:获取IP地址),使用ip addr命令(也可使用ifconfig命令,来查看IP地址); 下边可以看到 我已经配置好的三个静态

4.3K10

Linux地址空间&&虚拟地址

,所以在地址空间的初始化数据中就有它的地址虚拟地址,页表的左侧也有它的虚拟地址,在页表右侧就有它对应的物理地址。...上面的图就足矣说名问题,同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址! 在最开始的时候,地址空间的页表里面的数据哪里来? 程序一旦加载到内存就有地址。...所以虚拟地址相同而物理地址不同。 3. 进程调度 Linux中的nice值并不是能任意调度的,而是-20到19,这40个数字之间变换。...nr_active: 总共有多少个运行状态的进程 该结构中,选择一个最合适的进程,过程是怎么的呢?...0下表开始遍历queue[140] 找到第一个非空队列,该队列必定为优先级最高的队列 拿到选中队列的第一个进程,开始运行,调度完成! 遍历queue[140]时间复杂度是常数!但还是太低效了!

12810

Linux系统驱动之I2C协议

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...传输数据类比 怎么通过I2C传输数据,我们需要把数据主设备发送到设备上去,也需要把数据设备传送到主设备上去,数据涉及到双向传输。...(地址/方向) 学生B:到!...下图:白色背景表示"主→",灰色背景表示"→主" 3.2 读操作 流程如下: 主芯片要发出一个start信号 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,...下图:白色背景表示"主→",灰色背景表示"→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。

2.8K20

Linux I2C驱动入门,建议收藏!

Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...) i2c_slave_cb_t slave_cb; /* callback for slave mode */ #endif }; 重点成员如下: flags:标志 addr:芯片地址...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe...设备驱动的时候需要将前面注册的 i2c_driver Linux 内核中注销掉,需要用到i2c_del_driver 函数,此函数原型如下: void i2c_del_driver(struct

2.9K20

Linux系统驱动之I2C视频介绍

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...I2C软件框架 以I2C接口的存储设备AT24C02为例: APP: 提出要求:把字符串"www.100ask.net"写入AT24C02地址16开始的地方 它是大爷,不关心底层实现的细节 它只需要调用设备驱动程序提供的接口...I2C控制器驱动 它根据I2C协议发出各类信号:I2C设备地址I2C存储地址、数据 它根据I2C协议判断 3....我们讲什么 3.1 对于Linux 从上到下: 先讲I2C协议 APP可以通过两类驱动程序访问设备 I2C设备自己的驱动程序 内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序...I2C Controller Driver 芯片I2C控制器的驱动程序(称为adapter) 使用GPIO模拟的I2C控制器驱动程序(i2c-gpio.c) 3.2 对于单片/裸机 从上到下

2.3K40

Linux学习_003_虚拟CentOS 7.5 如何固定IP地址

在打开的【虚拟网络编辑器】中,会看到相关信息,虚拟网络类型采用的NAT模式,子网地址是192.168.25.0,虚拟的IP是192.168.25.*(查看自己虚拟机设置,对应修改即可)。 ?...我们点击【DHCP设置(P)…】,出现界面如下图,目前我们在学习阶段,我们可以修改IP地址范围和租用时间。 ?...一般虚拟的IP是使用DHCP服务进行随机分配IP,IP地址是在一个范围内的,所以IP会一直变化。 我们再点击【NAT设置(S)…】,出现界面如下图,设置网关IP: ?...我们在地址中增加一条记录: 地址:192.168.25.128(128可以变),子网掩码:255.255.255.0,网关:192.168.25.2,DNS服务器:192.168.25.2,最后一位一般是...参考链接: https://www.linuxidc.com/Linux/2017-12/149910.htm

1.1K10

单片到ARM Linux驱动——Linux驱动入门篇

大一到大二这段时间里学习过单片的相关知识,对单片有一定的认识和了解。如果要深究其原理可能还差了一些火候。...在单片开发中我们常常用到的是裸机,并没有用到操作系统(或者接触过ucos/rtos这种实时操作系统),但是嵌入式Linux开发就必须得在Linux系统中进行操作。...STM32通过PWM产生频率为20HZ占空比为50%方波,并通过单片测量频率并显示 嵌入式Linux操作系统具有:开放源码、所需容量小(最小的安装大约需要2MB)、不需著作权费用、成熟与稳定...如果要获取led 灯的状态,就用 read 函数驱动中读取相应的状态。 应用程序运行在用户空间,而 Linux 驱动属于内核的一部分,因此驱动运行于内核空间。...baseminor: 次设备号起始地址, alloc_chrdev_region 可以申请一段连续的多个设备号,这些设备号的主设备号一样,但是次设备号不同,次设备号以 baseminor 为起始地址地址开始递增

4.1K11

I2C 子系统(九)

/11f00000.i2c6/i2c-6/6-0058 ,这里是挂在某个 i2c bus 上的,地址为 0x58 的设备节点。...因此,对于 Linux 来讲,不区分 I2C 控制器和 I2C 机设备,用的都是同一套东西,即【总线、设备、驱动】框架,都有 probe 函数。...I2CI2C spec 规定如下 详细解析如下 对进行写操作时,主设备发出开始标志 (S) 和写地址 (地址加一个 R/W 位,1 为读,0 为写)。产生应答信号。...I2C spec 规定如下 详细解析如下(详细看图) 对进行读操作时,主设备发出开始标志 (S) 和读地址 (地址加一个 R/W 位,1 为读,0 为写)。等待产生应答信号。...然后发送寄存器地址,告诉读哪一个寄存器。紧接着,收到应答信号后,主设备再发一个开始信号,然后发送设备读地址产生应答信号并开始发送寄存器数据。

1.2K20

Linux I2C 驱动入门,建议收藏!!!

第一时间看干货文章 1 Linux内核将 I2C 驱动分为两部分: I2C 总线驱动, I2C总线驱动就是SOC的 I2C控制器驱动,也叫做 I2C适配器驱动。...) i2c_slave_cb_t slave_cb; /* callback for slave mode */ #endif }; 重点成员如下: flags:标志 addr:芯片地址...Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter, i2c_adapter 结构体定义在 include/linux/i2c.h 文件中,结构体内容如下: /*...Linux I2C总线的运行机制: 注册I2C驱动 将I2C驱动添加到I2C总线的驱动链表中 遍历I2C总线上的设备链表,根据i2c_device_match函数进行匹配,如果匹配调用i2c_device_probe...设备驱动的时候需要将前面注册的 i2c_driver Linux 内核中注销掉,需要用到i2c_del_driver 函数,此函数原型如下: void i2c_del_driver(struct

2.6K20

LinuxI2C驱动框架分析

I2C总线上连接的I2C设备都有一个标识自己的设备地址,由这个设备地址来确定主设备发过来的命令是否该由它来响应。 驱动 简单的说驱动代表着操作设备的方式和流程。...Linux总线设备框架的工作原理 如果想要弄清楚I2C驱动框架,必须深刻的理解Linux的总线设备框架。之所以会形成这样的框架,很重要的原因是为了代码的复用性。...2.I2C传输协议 ---- 对于I2C来说,有如下的特点: 1.一条串行数据线(SDA),一条串行时钟线(SCL) 2.每个接到总线上的器件都可以使用软件根据它的唯一地址来识别。...3.LinuxI2C驱动程序的体系结构 ---- 对于Linux下的I2C驱动,其体系结构的组成主要分为三个部分 (1)I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法...(”algorithm”)上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。

4.6K11

Linux应用开发【第十二章】I2C编程应用开发

​ 每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/角色和地址可配置,主机可以作为主机发送器和主机接收器。...3) 应答 ​ 每当主机向发送完一个字节的数据,主机总是需要等待给出一个应答信号,以确认是否成功接收到了数据,应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期...板子,这个I2C主机就是imx6中的I2C控制器模块;其他的I2C-device在I2C总线里充当的角色,通常这些是板子上完成特定功能的传感器外设,只不过该外设与主控cpu的通信方式是只需要两条线路的...I2C总线,比如在我们的100ask_imx6UL板子中就有eeprom和AP3216两个外设,它们在I2C总线中充当的都是I2C的角色,它们和主控芯片imx6中的I2C控制器1都是以并联的方式挂在这个...第十,检查I2C通信过程中是否出现SDA或者SCL被长时间一直拉低的状态。比如I2C外设由于异常在发送完ACK信号后没有释放SDA。

3.4K31

同时使用两片I2C同型号设备时地址怎样设置 (如何更改器件地址

同时使用两片I2C同型号设备时地址怎样设置 有时候  可能 需要同时使用 多个同型号i2C的器件,这就需要 我们 更改 器件的物理地址。...同时使用两片pcf8591时地址怎样设置,也就是如何更改 器件地址。...以pcf8591 为例子 以下 为PCF8591 的引脚图 可以根据引脚图对比实物图 找到 对应的3个地址引脚A0、A1和A2用于编程硬件地址。... 暴力跳 开),然后接 上  高电平,那么地址就改好了。...实物图如下 (不会锡焊, 有点丑 哈哈哈) 要更改 地址的话 就只需要  接 一根 杜邦线 IO 控制高电平即可 更改地址  未接高电平时:  显示是0x48 接上 高电平后  显示 是 0x49

2.1K30

Linux】进程地址空间

文章目录 一、前言 二、什么是进程地址空间 三、进程地址空间如何进行管理 四、为什么会存在进程地址空间 五、进程地址空间区域的严格划分 一、前言 学习Linux系统编程一共要翻越三座大山 – 进程地址空间...所以虽然子进程和父进程 g_val 的虚拟地址相同,但是它们通过各自的页表映射到的物理地址是不相同的,自然也可以物理内存中取出不同的数据。...注:在操作系统中,进程地址空间中的地址通常也被称为线性地址,因为它是按比特位全0到全1依次顺序编址的;磁盘程序内部的地址通常被称为逻辑地址;在其他地方,线性地址、虚拟地址、逻辑地址区分比较严格,但是在...Linux中,三者的意思是一样的,都表示虚拟地址,大家不用过于区分。...注:严格来说,磁盘中程序内部的地址叫做逻辑地址,但是在上面我们就说过,对于Linux来说,虚拟地址、线性地址、逻辑地址是一样的,都是虚拟地址

3.8K00
领券