ubuntu 嵌入式(linux嵌入式软件开发)

嵌入式ubuntu怎么加载i2c总线

Linux定义了系统的IIC驱动体系结构,在Linux系统中,IIC驱动由3部分组成,即IIC核心、IIC总线驱动和IIC设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的IIC框架。

3.1.1IIC核心

IIC核心提供了IIC总线驱动和设备驱动的注册、注销方法,IIC通信方法(即algorithm”,笔者认为直译为“运算方法”并不合适,为免引起误解,下文将直接使用“algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。

在我们的Linux驱动的i2c文件夹下有algos,busses,chips三个文件夹,另外还有i2c-core.c和i2c-dev.c两个文件。

i2c-core.c文件实现了I2Ccore框架,是Linux内核用来维护和管理的I2C的核心部分,其中维护了两个静态的List,分别记录系统中的I2Cdriver结构和I2Cadapter结构。I2Ccore提供接口函数,允许一个I2Cadatper,I2Cdriver和I2Cclient初始化时在I2Ccore中进行注册,以及退出时进行注销。同时还提供了I2C总线读写访问的一般接口,主要应用在I2C设备驱动中。

3.1.2IIC总线驱动

IIC总线驱动是对IIC硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至直接集成在CPU内部。总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在那里,等待设备驱动调用其函数。

IIC总线驱动主要包含了IIC适配器数据结构i2c_adapter、IIC适配器的algorithm数据结构i2c_algorithm和控制IIC适配器产生通信信号的函数。经由IIC总线驱动的代码,我们可以控制IIC适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。

Busses文件夹下的i2c-mpc.c文件实现了PowerPC下I2C总线适配器驱动,定义描述了具体的I2C总线适配器的i2c_adapter数据结构,实现比较底层的对I2C总线访问的具体方法。I2Cadapter构造一个对I2Ccore层接口的数据结构,并通过接口函数向I2Ccore注册一个控制器。I2Cadapter主要实现对I2C总线访问的算法,iic_xfer()函数就是I2Cadapter底层对I2C总线读写方法的实现。同时I2Cadpter中还实现了对I2C控制器中断的处理函数。

3.1.3IIC设备驱动

IIC设备驱动是对IIC硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的IIC适配器上,通过IIC适配器与CPU交换数据。设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地与硬件设备通讯。

IIC设备驱动主要包含了数据结构i2c_driver和i2c_client,我们需要根据具体设备实现其中的成员函数。

i2c-dev.c文件中实现了I2Cdriver,提供了一个通用的I2C设备的驱动程序,实现了字符类型设备的访问接口,实现了对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的ioctl等标准文件操作的接口函数。我们可以通过open函数打开I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过read和write函数完成对I2C设备的读写操作。

通过I2Cdriver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的操作数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中完成对特定的数据格式的解释以及实现一些专用的功能。

ubuntu和linux的区别

1、系统不同。

unix的厂商基本上都是软硬件共同开发,所以unix系统通用性不高,主要都是针对专门的硬件进行专门的设计。

所以性能、稳定性都极致的好;而linux确是一个通用系统,大部分的厂商并不自己生产硬件(只有少数像redhat。

2、适合人群不同。

从商业上来讲,由于上面的性能差别,就导致了两种不同的商业模式,unix软硬件一起卖,而且很贵(freebsd除外),而linux只卖软件,大多免费(像radhat这样走unix道路的厂商,还是少数);所以,unix适合大型企业,而linux适合中小型企业和个人。

3、概念不同。

由于linux是开放源代码的自由软件,所以不同的人,不同的社区或者公司都可以按照自己想法,用linux内核来“组装”出一个操作系统。Ubuntu就是一个linux发行版,也就是说ubuntu是以linux为内核的操作系统。

所以其实ubuntu和linux根本不是同一个概念,如果Linux是指人类,那么Ubuntu只是一个名为乌班图的人。

学嵌入式用哪个linux

学习嵌入式开发可以选择多种Linux发行版,如Ubuntu、Debian、Fedora等。

解释:

1.选择多样性:在学习嵌入式开发时,使用哪种Linux发行版并没有严格的规定。Ubuntu、Debian、Fedora等都是常用的Linux操作系统,它们都可以提供嵌入式开发所需的基本工具和库。

2. Ubuntu的普及性:Ubuntu是嵌入式开发中最常用的Linux发行版之一。它拥有庞大的用户群体和活跃的社区支持,对于初学者来说非常友好。此外,Ubuntu提供了丰富的软件资源,可以轻松安装各种开发工具。

3. Debian的稳定性:Debian是另一个受欢迎的Linux发行版,特别是在服务器领域。对于嵌入式开发而言,Debian的稳定性和可靠性使其成为不错的选择。它提供了大量的软件包管理工具,方便开发者安装和更新软件。

4. Fedora的创新性:Fedora作为一个较为年轻的Linux发行版,注重创新和技术更新。虽然它在某些方面可能不如Ubuntu或Debian那样保守稳定,但Fedora经常包含最新的技术预览和工具,吸引了很多追求新技术的学习者和开发者。

总之,学习嵌入式开发时,选择哪种Linux发行版主要取决于个人喜好、项目需求和系统要求。以上提到的几个发行版都是不错的选择,可以根据自己的实际情况进行选择。

阅读剩余
THE END