linux
文章平均质量分 66
caodongwang
热爱学习,热爱生活~~~
展开
-
【linux iic子系统】GPIO模拟i2c控制器adapter(九)
gpio模拟i2c adapter原创 2022-01-26 15:10:45 · 2983 阅读 · 0 评论 -
【linux iic子系统】gpio模拟i2c(八)
刚学i2c子系统时写的程序,一个简单的参考~~~注意,gpio的硬件地址信息需要根据实际填写~~gpio_i2c.h文件#ifndef _HIK_GPIO_I2C_H#define _HIK_GPIO_I2C_Hint init_gpio(void);void exit_gpio(void);long gpio_tmp_read_data(struct i2c_client *client, unsigned char reg_addr);long gpio_tmp_write_d原创 2022-01-26 14:51:52 · 4291 阅读 · 0 评论 -
linux程序运行时间精确计算(转载)
写程序时,程序的运行效率很重要,其往往是评价程序优劣性的直接标准。程序运行效率的最简单方法就是计算程序的运行时间。为了提高程序效率,使用适当的方法对程序的各个部分进行运行时间的计算是很有必要的。在 Linux/Unix 环境下,计算 C 程序运行时间可以通过以下三个函数来实现:clock()、time()、gettimeofday()。clock() 函数clock()函数是 ANSI C 的标准库函数,是 C/C++ 十分常用的计时函数,其声明定义在 time.h 头文件中:clock_t clo转载 2022-01-12 09:31:47 · 6543 阅读 · 0 评论 -
强制打印方法,输出重定向解决
在平常调试程序时候,经常发现标准输出被重定向了,也就是说printf无法打印,以下提供三种方法强制打印。方法一:#include <syslog.h>#include <sys/syslog.h>#include <stdarg.h>#include <stddef.h>#include <stdio.h>#include <unistd.h> static int doser_debug_print_messa原创 2021-10-24 11:28:25 · 1120 阅读 · 0 评论 -
PCA9548/PCA954X配置方法及实现分析
1 基础知识 pca9548芯片系统框图如下图1.1所示:图1.1 如上图所示,通过配置pca9548的寄存器,即可切换开关完成i2c switch。在子总线下设备地址没有冲突的情况下,可以接通多个子总线,如同时接通子总线0和7。 pca9548内核驱动支持自动切换i2c switch,前提是配置好设备树。设备树的配置示例如下图1.2所示:图1.2 通过上图1.2所示配置后,pca9548的内核驱动程序会注册虚拟的i2c总线16-23,这样...原创 2021-10-24 10:52:08 · 12502 阅读 · 14 评论 -
根文件系统(四)——U盘文件系统制作
U盘根文件系统制作方法 首先准备一个稍微大一点的U盘,其次对U盘进行分区,然后将某个区当做根文件系统区,格式化成想要加载的文件系统类型,在将自己制作的rootfs目录下的东西都拷贝到这个区,最后在U盘第一个分区添加linux内核和grub配置文件。(1)分区格式化将U盘插入装有Linux系统的设备,然后使用fdisk命令进行分区:fdisk /dev/sdx输入 p:查询当前分...原创 2021-09-04 15:32:04 · 1238 阅读 · 0 评论 -
根文件系统(三)——initramfs文件系统制作
什么是initramfs文件系统? 在 根文件系统分类 章节中讲述了内核会去挂载一个特殊的rootfs,然后再通过解析"root=xxx"命令行,去挂载 /dev/xxx 真正的根文件系统,那么,我们是否可以直接使用这个rootfs当做最终的根文件系统呢?当然可以,这便是 initramfs 内嵌式文件系统,它是一种ramfs文件系统,既可以当做最终的根文件系统,也可作为临时过渡的文件系统。关于initramfs 的前世今生不在这讲述,这里只讲述如何制作使用它!怎么制作initra...原创 2021-09-04 15:25:40 · 4755 阅读 · 0 评论 -
根文件系统(二)
根文件系统怎么挂接的? 我们常常说内核起来之后会第一个挂接根文件系统,这个根文件系统就是我们制作的吗?其实。。。并不是! 仔细想一想,我们自己制作的根文件系统放在哪???在存储介质上,flash、硬盘、u盘等,那么我们怎么去访问它呢?我们平常读取存储介质中的文件,需要使用文件系统通过挂载点(mount /dev/xxx /mnt)才能获取介质中文件,同样,挂接我们自己做的根文件系统也要这样做,其根因是VFS,我们无法直接去读取介质中文件。 通过上面所述,就...原创 2021-09-04 15:23:01 · 550 阅读 · 0 评论 -
根文件系统(一)
什么是根文件系统? 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系...原创 2021-09-04 15:17:47 · 2394 阅读 · 0 评论 -
【PCI】PCIE设备映射关系图(五)
本文以某PCIE设备为例,画出映射关系图。主片测将PCIE设备所需的资源拷贝到BAR空间对应的虚拟内存中,通过TLP总线事务传递到PCIE设备内存,从而使PCIE设备运行起完整的linux系统完成特定功能。注意,PCI设备空间与PCIE配置空间不同。...原创 2021-07-10 22:14:56 · 6698 阅读 · 2 评论 -
【PCI】PCI驱动匹配(四)
本文参阅4.18内核。原创 2021-07-10 21:58:49 · 865 阅读 · 0 评论 -
【PCI】RC与PCH关系(二)
基本概念PCH全称为Platform Controller Hub,是intel公司的集成南桥。北桥中的内存控制器和PCIe控制器都集成到了CPU内部,相当于整个北桥芯片都集成到了CPU内部,主板上只剩下南桥。所以PCH可以理解成南桥,目前Intel的有些SOC就是连PCH也集成到了CPU内部,比如:Intel Xeon D系列。RCRC(PCI Express root complex)根联合体, 相当于PCIE主桥,也有称为pcie总线...原创 2021-07-10 21:51:15 · 5096 阅读 · 0 评论 -
【PCI】PCI & PCIE基础(一)
关于PCI相关基础知识请参阅王齐 先生的著作《PCI Express 体系结构导读》,个人认为这本书是学习PCI与PCIE的经典之作,以下简要说明初学者应阅读哪些章节。PCI第一 ~ 三章节是必须阅读的章节,其中第二章节前三小结是必须吃透部分,而关于信号相关知识可先略过。PCIE 第四、五、六、十章节也是必须阅读章节,主要是熟悉各种概念和之间关系,而具体寄存器的配置之类可略过。 其余章节根据自己工作性质选择阅读即可。提...原创 2021-07-10 21:24:28 · 1064 阅读 · 0 评论 -
【linux iic子系统】i2c驱动示例——tmp75温度传感器驱动代码(七)
I2C驱动要完成哪些事?想要编写i2c驱动,就必须先弄清楚i2c驱动是干啥的。i2c驱动对上需要提供给用户操作对象,用户才能通过这个对象最终访问到i2c设备;对下需要能正确操作i2c设备,也就是实现i2c设备的读写操作;对中间能对接i2c核心提供的接口,实现驱动与设备关联,也方便系统统一管理。综上,i2c驱动需要干以下三件事:使用i2c核心提供的接口将驱动注册到系统,并实现驱动与设备匹配成功所需要执行的probe函数,以及设备或驱动卸载时执行的remove函数。 注册字符驱动,创建设备节点,让原创 2021-05-29 16:59:08 · 2688 阅读 · 4 评论 -
【linux iic子系统】i2c-designware框架分析(六)
i2c-designware框架怎么注册i2c适配器?两种方式,一种是通过platform_bus_type平台总线注册,另一种是通pci_bus_type总线注册。pci方式I2c-designware-pcidrv.c文件内核启动时会扫描所有pci外设为它们分配内存与io空间,并读取配置空间信息填充pci_dev结构体注册到pci总线(设备驱动模型当中的总线),然后就是pci设备与pci驱动的匹配过程,使用厂商号、设备号、次厂商号、次设备号完成匹配,如下匹配列表:static co原创 2021-05-29 16:45:20 · 4370 阅读 · 0 评论 -
【linux iic子系统】i2c整体框图【精髓部分】(五)
经过之前文章介绍,读者可能还未对i2c子系统有整体的认识,没关系,这篇文章可以帮助你。前言我们知道,注册一个字符设备驱动可以向上提供字符设备节点,比如/dev/xxx节点,我们对这个节点进行write/read操作,最终就会调用到字符驱动提供的write/read函数,以完成我们想要实现的功能。同样i2c设备与驱动匹配之后,也是注册设备节点供用户操作,注意的是,这里说的设备节点包含字符设备和块设备节点,本文以字符设备为例进行讲解。如果对字符设备驱动没有概念的读者,请先查阅相关文章学习。对于接触过原创 2021-05-29 16:03:09 · 1469 阅读 · 0 评论 -
【linux iic子系统】i2c设备的添加方法(四)
I2C设备的4种添加方法分为静态注册、动态注册、用户空间注册及i2c驱动扫描注册1.静态注册静态注册就是在架构板级文件或初始化文件中添加i2c设备信息,并注册到特定位置(__i2c_board_list链表)上就可以了,如arm架构下board-xxx-yyy.c文件,x86架构下xxx-yyy-init-zzz.c文件。当系统静态注册i2c控制器(adapter)时,将会去查找这个链表,并实例化i2c设备添加到i2c总线上。注意:一定要赶在i2c控制器注册前将i2c设备信息添加到链表上。...原创 2021-05-21 22:33:28 · 4680 阅读 · 8 评论 -
【linux iic子系统】i2c设备与驱动匹配过程(三)
本文讲解基于linux4.18内核。重要根据前面内容我们可以知道i2c子系统有几个重要的东西:I2C总线:i2c总线主要就是维护着两个链表——驱动、设备。i2c驱动注册时候,通过i2c_driver结构体内部driver成员挂载到总线上。i2c设备注册时候,通过i2c_client结构体内部device成员挂载到总线上。所以总线作用就是i2c设备和I2C驱动的匹配和删除等。值得注意的是,i2c适配器也是挂在总线上(它的作用会在《i2c设备添加方法》章节里说明)!I2C驱动:使用i.原创 2021-05-21 21:12:41 · 3506 阅读 · 4 评论 -
【linux iic子系统】linux下i2c框架(二)
linux为什么要整个IIC驱动框架? 学过单片机的都知道,写一个IIC设备的驱动还是比较容易的。对于软件IIC来说,写几个模拟产生信号的函数和读写函数就好了;对于硬件IIC来说,配置好IIC控制器的寄存器,然后写几个读写函数就好了。那么linux为什么要整个IIC驱动框架呢? 这里举个例子,假如一个cpu有2个IIC控制器1、2,那么我们将IIC设备挂在IIC控制器1上时候,要写一个IIC设备驱动程序,当我们将IIC设备挂在IIC控制器2上时候,有要写一个IIC设备驱...原创 2021-05-16 20:13:49 · 978 阅读 · 0 评论 -
【linux iic子系统】i2c基础(一)
什么是IIC?IIC的全称是Inter-Integrated Circuit,由duPhilips公司推出,是近年来在微电子通信控制制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,仅需两根线(SLC、SDA)即可完成信息传输,并且通信速率较高。在主从通信中,可以有多个IIC设备同时接到IIC总线上,通过地址来识别通信对象。IIC总线与IIC设备硬件连接方式IIC总线的两根线必须上拉,要么CPU内部上拉,要么外置上拉电阻上拉!一般而言,CPU通过两种方式连接II...原创 2021-05-16 20:09:58 · 1371 阅读 · 0 评论