qxmpp登录openfire时的“Not Authorized”问题 2016年10月16日 9 阅读 问题最近在一个linux机器上建了一个openfire,hostname为“A”,用spark的时候,在server处填写对方IP可以登录但发现用qxmpp以“username@IP/resource”为JID登录时返回“Not Authorized”,但如果用“username@hostname/resource”为JID,则返回“socket e...
I2C子系统之at24c02读写测试 2016年10月16日 10 阅读 结合ioctl和at24c02的介绍,写了个at24c02的测试程序测试硬件平台:TQ2440、at24c02内核版本:linux-2.6.37.1读写单独分开成两个小程序。相关阅读:I2C子系统之at24c02读写测试 http://www.linuxidc.com/Linux/2012-08/68256.htmI2C子系统之ioctl() http://www.linuxidc.com/Linux/2012-08/68257.htmI2C子系统之at2...
I2C子系统之ioctl() 2016年10月16日 10 阅读 根据前一篇的文章介绍 at24c02的读写方式有很多种,写有两种1.写一字节数据到word address处2.从指定的word address处开始写一页数据,此word address需要页对齐!读有三种1.从at24c02当前的word address读一字节数据2.从指定的word address 读数据3.从当前的word address地址开始读一串数据根据驱动中write() read()的实现方法可以发现,当msg发送完毕时才发送stop信...
I2C子系统之at24c02简介 2016年10月16日 10 阅读 AT24C02存储规格总共32个page,每个page为8byte。总共256KB(2Kb),地址的长度需要使用8bit(刚好可以用来表示256个字节的地址)来表示。AT24CC02的地址设备的地址由8bit组成,前4 bit是固定的(1010);接着的3 bit是和A2 A1 A0的硬件连接相关,通过指定这3 bit可以在统一个I2C系统里面最多连接8个AT24C02设备;第8bit用来表示读/写选择,1表示读/0表示写。AT24C02会和总线上的设备地...
I2C子系统之总结 2016年10月16日 10 阅读 I2C子系统的结构是符合内核总的驱动模型。I2C 子系统主要包含4大部件1.i2c bus2.adapter device3.client device4.adapter driver其中i2c bus是用于管理的,并非是通信总线。i2c bus上挂着adapter(主机) device、client(从机) device、adapter driver。为了统一操作,adapter device、client device、adapter driver并非...
I2C子系统之内核中I2C子系统的结构 2016年10月16日 10 阅读 本文开始,分析内核的i2c子系统。说明:1.分析的内核版本为2.6.37.1 2.开发板为TQ2440,板载ARM9(S3C2440) 3.I2C设备为AT24C02 4.分析顺序就是内核I2C子系统的注册顺序(即本系列文章发表的先后顺序)。在正式进入代码分析前应摸清各初始化函数的执行先后顺序,清楚这个顺序后对i2c的整个框架也有就有数了。1.初始化函数的执行顺序1.1 函数执行顺序是如何确定的内核编译链接完成后初始化函数的执行先后顺序就确定了。这是通过链...
I2C子系统之I2C bus初始化——I2C_init() 2016年10月16日 10 阅读 根据前文的分析(http://www.linuxidc.com/Linux/2012-08/68260.htm),在linux内核启动的时候最先执行的和I2C子系统相关的函数应该是driver/i2c/i2c-core.c文件中的i2c_init()函数。下面具体此函数具体做了那些预备工作。1.i2c总线的注册i2c_init()的函数实现如下:staticint__initi2c_init(void){......retval=bus_register(...
I2C子系统之platfor_device初始化——smdk2440_machine_init() 2016年10月16日 10 阅读 调用完函数i2c_init后(见 I2C子系统之I2C bus初始化——I2C_init() http://www.linuxidc.com/Linux/2012-08/68261.htm)系统将成功创建i2c总线。初始化完毕总线后还需要接着初始化i2c设备和i2c驱动(一般是先初始化device),对于2440来说,linux内核中的device初始化一般是通过platform device来初始化的,platform device的初始化在/arch/...
I2C子系统之platform_driver初始化——I2C_adap_s3c_init() 2016年10月16日 10 阅读 在完成platform_device的添加之后,i2c子系统将进行platform_driver的注册过程。platform_driver的注册通过调用初始化函数i2c_adapter_s3c_init函数来完成。i2c_adap_s3c_init()函数体如下:staticint__initi2c_adap_s3c_init(void){returnplatform_driver_register(&s3c24xx_i2c_driver);}pl...
I2C子系统之I2C总线时钟频率设置 2016年10月16日 10 阅读 时钟相关基本知识可先参考这篇http://www.linuxidc.com/Linux/2012-02/54968.htm下面直接从总线时钟初始化函数开始分析:void__inits3c244x_init_clocks(intxtal){/*initialisetheclockshere,toallowotherthingslikethe*consoletousethem,andtoaddnewonesaftertheinitialisation*/s3c...
I2C子系统之adapter device和client device注册——I2C_add_number_adapter() 2016年10月16日 9 阅读 如前文所述(http://www.linuxidc.com/Linux/2012-08/68263.htm),在probe函数会调用函数i2c_add_number_adapter(),通过此函数来实现adapter device和client device的注册i2c_add_number_adapter()函数如下:inti2c_add_numbered_adapter(structi2c_adapter*adap){intid;intstatus;i...
I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析 2016年10月16日 10 阅读 __i2c_first_dynamic_bus_num定义的位置在/driver/i2c/i2c-boardinfo.c#include<linux/kernel.h> #include<linux/i2c.h> 。。。。。。int__i2c_first_dynamic_bus_num;EXPORT_SYMBOL_GPL(__i2c_first_dynamic_bus_num);。。。。。。int__initi2c_register...
I2C子系统之 adapter driver注册——I2C_dev_init() 2016年10月16日 9 阅读 i2c的操作在内核中是当做字符设备来操作的,相关初始化在由i2c_dev_init函数来初始化。并且i2c adapter的驱动通过i2cdev_driver这个通用驱动的attach方法来实现注册的。下面具体分析整个过程。staticint__initi2c_dev_init(void){。。。。。。res=register_chrdev(I2C_MAJOR,"i2c",&i2cdev_fops);if(res)gotoout;i2c_dev_c...
I2C子系统之write() 2016年10月16日 10 阅读 应用层调用write()函数后首先进入的是i2c类设备的write函数,即i2cdev_fops中的write方法。此处的i2cdev_fops对应的是系统中所有i2c类设备的操作。也就是说系统中所有i2c adapter 的read()write() open() close() ioctl()等操作,首先调用的是i2c类i2cdev_fops中的方法,通过i2c类中的方法再去寻找adapter 对应的算法i2c_algorithm,此处s3c2440对...
μC/OS中高优先级任务一旦处于就绪态总能获得CPU控制权的理解 2016年10月16日 10 阅读 μCOS的任务切换时间:1.任务创建时2.任务挂起时3.任务恢复4.任务延时时 6.任务释放信号量时7.任务释放互斥信号量时8.任务请求消息邮箱时9.任务释放消息队列时10中断退出时(OSINTEXIT()函数中)任务之前的切换应该就是利用时钟中断来实现,当OS运行完一个时钟片后会产生一个中断(定时器的中断)异常,PC指针立即跳转到异常向量表执行处理异常的代码,随后会导致OS执行一次任务调度。整个过程分析如下:产生异常后执行的第一条指令b HandlerI...
Linux中container_of实现分析 2016年10月16日 10 阅读 内核版本:linux-2.6.37.1container_of的宏定义如下:#definecontainer_of(ptr,type,member)({ consttypeof(((type*)0)->member)*__mptr=(ptr);(type*)((char*)__mptr-offsetof(type,member));})使用container_of宏后,可通过父结构体type中的成员member的已知地址ptr,来寻找当前ptr地址所...
内核代码不可直接访问用户空间数据 2016年10月16日 10 阅读 一定要注意的是不能直接访问用户空间数据,内核代码可以通过特殊的函数来访问用户空间数据,copy_to_user copy_from_user这两个函数就是内核代码访问用户空间数据的函数,但是内核不能直接通过像是memcpy函数来直接操作用户空间数据。按照linux设备驱动书本上的说法,我的理解,三个原因描述如下。其一,驱动程序架构不同或者内核的配置不同,用户空间数据指针可能运行在内核模式下根本就是无效的,可能没有那个虚拟地址映射到的物理地址,也有可能直接指...
交叉编译gdb遇到no termcap library found的解决方法 2016年10月16日 10 阅读 在是用ejtag的时候缺少了gdb工具,因此自己需要手动编译一个gdb工具,编译过程中遇到了一些错误,翻阅了大量的网上资料解决了这些问题,从而也学习了一下交叉编译源码包的方法,这里做一个总结。首先去官方网站下载gdb的源码包,我下载的7.4.1版本的源码包,解压开来,进入到源码包的根目录下。对于一个源码包,拿到手里首先要阅读的就是README,然后看一下INSTALL文件,这个文件里编译源码包的步骤。基本上所有的源码包都是三步,configure,make...
如何在GNU Emacs环境下编译并运行C/C++程序? 2016年10月16日 10 阅读 学习C/C++的朋友有没有想过完完全全的在Linux环境下开发软件!?我想过,可能是因为个人对Windows平台有些偏见,或者说个人不是非常喜欢在Windows下写程序的感觉,总觉得有那么一层膜隔阂着我们,不像Linux,可以做强大的服务器,在终端下只需要使用简简单单的命令便能完成相当复杂的事情,是不是感觉很高深!?还有很多很多开源项目,Emacs也算一个吧!!! 呵呵,谈到在Linux下编程,我们不得不提这两款编辑器:vi/vim和Emacs(确切的说E...
使用OpenCV官方提供文件配置、静态编译并运行OpenCV-2.3.x/2.4.x实例 2016年10月16日 10 阅读 当我们需要测试程序,或者想将程序发给其他同事或者同学,以让同事或者同学运行以测试程序性能或者逻辑是否恰当时,是不是还要他人也要像你当初开发程序时一样一步一步的配置OpenCV运行环境!?如果不做这些,还会提示像图1所示的系统错误(无法启动程序,因为计算机中丢失“opencv_highgui241d.dll。尝试重新安装该程序以解决此问题”),这是不是太麻烦了,其实我们可以将程序以静态链接的方式编译,如此便少去了配置运行时环境的步骤了。图1动态编译的程序在未...