Linux驱动系列1.Misc(混杂)设备之GPIO
Misc设备–特殊的字符设备本质上仍然是字符设备,只是被增加了以层封装而已。Misc设备共享一个主设备号MISC_MAJOR(10),但次设备号不同(系统最多有255个杂项设备),所有的misc设备形成一个链表,对设备访问时内核根据次设备号查找对应的 misc设备,然后调用其中的file_operations结构体中注册的文件操作接口进行操作,因此其驱动的主体工作还是file_operations的成员函数。
1.字符设备模板及说明解析:1.http://blog.csdn.net/wdzxl198/article/details/8817147 (自动创建设备节点)2.http://blog.chinaunix.net/uid-20698426-id-136243.html主要是init函数(获取设备号,创建节点) ,exit函数(回收操作),及设备操作集对应的操作函数。
2.设备操作集file_operations结构体分析:http://www.linuxidc.com/Linux/2011-09/43530.htm
特别的异步IO轮询函数: ...
Linux系列--2.磁盘分区和Linux根文件系统,目录结构
DD初学Linux系列–2.磁盘分区和Linux文件系统,目录结构来源:
http://linux-wiki.cn/wiki/zh-hans/Linux%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84
http://vbird.dic.ksu.edu.tw/linux_basic/0130designlinux_2.php
一、根文件系统/bin这一目录中存放了供所有用户使用的完成基本维护任务的命令。其中bin是binary的缩写,表示二进制文件,通常为可执行文件。一些常用的系统命令,如cp、ls等保存在该目录中。
/boot这里存放的是启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。
/dev在此目录中包含所有的系统设备文件。从此目录可以访问各种系统设备。如CD-ROM,磁盘驱动器,调制解调器和内存等。在该目录中还包含有各种实用功能,如用于创建设备文件的MAKEDEV。
/etc该目录中包含系统和应用软件的配置文件。
/etc/passwd该目录中包含了系统中的用户描述信息,每行记录一个用户的信息。
/home存储普通用户的个人文件。 ...
开源许可-略知一二
很早就开始关注些开源项目,加上这段时间在学习linux的相关东西,毕竟商用与学习是不一样的,所以就不得不全面了解下开源许可了。在此Mark一下。
找了下度娘,搜到一篇很全的说明:http://blog.csdn.net/techbirds_bao/article/details/8785413。
今天看到了一个开源IM工具,是蘑菇街的—mogutt,它是基于Apache Licence V2.0的。对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售
现在也想学习下QT5,它的开源版本是基于LGPL的。商业软件可以使用,但不能修改LGPL协议的代码,只能使用类库引用。
Linux本身是基于GPL的。商业软件不能使用GPL协议的代码
与SSI的初遇
之前只弄过CGI,今天接触了下SSI(Lwip里httpd的)。
首先补充了下基础知识(来源于网络):
SSI :Server Side Include,是一种类似于ASP的基于服务器的网页制作技术。SSI 具有强大的功能,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,动态显示时间和日期,以及执行shell和CGI脚本程序等复杂的功能。将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本、图形或应用程序信息包含到网页中。默认扩展名是 .stm、.shtm 和 .shtml
在Lwip里的httpd中,工作原理:LWIP对于.shtml,.ssi,.shtm后缀的文件,会检测文件中<!–#name–>格式的TAG标志。
然后再这个标记后面添加你想要的字符串。并不是替换,不过这个方法在脚本中不行, <!–#name–>
是html文件的注释,但是在 <script>…</script>中就不是注释了,所以在添加js代码的时候必须把整个JS脚本添加进来。
对于SSI使用详解 可移步至:http://ww ...
IP与MAC--ARP及W5500超时机制,非阻塞
1.今天客户反馈了个问题:使用UDP通信,在电表(类服务器)不断电的情况下,更换集中器(类客户端)(IP不变,MAC变了),通信会失败,前提条件:由交换机组成的网络。
按照理论上来讲,应该是会有问题的。后面就补习了下ARP相关的知识。每个主机和路由器都会有ARP cache,无论主机是跑的是软件协议栈(如Lwip等),还是硬件协议栈(w5500)。ARP是为上层的协议服务的。
在不断电的情况下,电表中缓存着前一个集中器的IP和MAC映射关系,如果更换集中器之后且IP不变,电表进行UDP通信使用的还是之前的映射关系,所以会通信异常。
2.另一个客户反馈的W5500的TCP连接问题,connect。如果服务器断了,客户端会一直死在连接的while里面不断请求连接。很明显,使用的是类似阻塞模式,但是超时中断未发生。A,改为非阻塞方式,立即返回状态。B,设置中断及合理的超时时间(TCPto)。SIMR,SIR及RTR, RCR
while ( IINCHIP_READ(Sn_SR(s)) != SOCK_SYNSENT )
{
if(IINCHIP_READ(Sn_SR(s ...
Lofter搬家到WordPress
差不多折腾了一天,终于写了个脚本可以把Lofter的文章搬到WordPress了,主要就是将Lofter的备份文件转成WordPress的备份文件格式。基本上可以搬文章主体,标签,日期,标题。评论没写,因为基本上俺的博客评论为0 ,O(∩_∩)O哈哈~,这也省事多了。功能的实现纯粹是体力活啦,主要就是XML的解析与重构啦,用的是python的类库xml.dom,还是挺方便的。主要遇到了一个时间的转换问题,也就是datatime,time,字符串之间的游戏,其他的真的就没啥了。
代码就不放了,个人觉得应该没啥人要用的,如果真的谁有需要的话,可以@我,Email,留言等都行。
DD初学Linux系列--1.环境安装搭建及启动过程
DD初学Linux系列–环境安装搭建及启动过程
一、PC版:   前段时间生日,自己入手了一块三星的SSD作为生日礼物。具体型号:(840EVO,mSATA接口),因为刚好我的本本有mSATA接口,就不需要拆原来的硬盘了。上周末,给自己的本本重装了下系统,SSD上装win8.1,原来硬盘装系统和软件的盘来装Ubuntu麒麟版。先装了win8.1,再装Ubuntu,接下来就是引导了,用了EasyBCD来设置。于是顺便了解了下Linux引导(LILO和Grub)—来源于网络 如果想要在同一机器上运行 Windows 和 Linux,那么应该先安装Windows OS,然后再安装 Linux OS,这样,在 Linux 安装中所选择的引导加载程序就不会被 Windows 引导加载程序所覆盖。与 Linux 引导加载程序不同,多数 Window 引导加载程序不支持引导 Linux。如果已经先安装了 Linux,那么只需要自己创建一张 Linux 引导盘,这样就可以在安装完 Windows 之后,回到 Linux 安装中并重写 MBR二级引导 ...
用pelican在github上创建自己的博客
今天在网上查用Python生成静态网页,偶然中发现了这个pelican好东东,而且发现可以自己用它在github上创建博客,经过一段的折腾,终于基本上会用了。
MarkdownPad2编辑.md的文章代码,当然也可以用.rst。然后用pelican生成静态网页,通过Github上传到我的Git仓库,今天终于知道了Git的另一个用途,真是太强悍了。MarkdownPad2也感觉挺好用的。
串口上位机(接收同步显示FFT波形) 问题Mark!
消除: warning C4996:’sprintf’: This function or variable may be unsafe. Consider 的方法: http://blog.csdn.net/lllxy/article/details/6859289 最简单的可以用的方法: 选项Project -> Configuration Properties -> C/C++ ->Preprocessor -> Preprocessor Definitions 添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE 或用sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [argument]...);替换
vc2008错误:不能将参数 1 从“const char []”转换为“LPCTSTR” http://90chuanlin.blog.163.com/blog/static/4042992920114233169866/ 是因 ...
FM3应用笔记调试+串口上位机(大数据量,高波特率,保存到WAV文件) 问题Mark!
//————————————————————————
9.2 使用富士通驱动库,启动文件要统一用驱动库的启动文件
FM3
//------------------------------------------------------------------------
1.FM3使用串口printf打印调试信息步骤
A.keil
打开串口头文件(pdl_user.h文件里ON)--》添加UART驱动库文件(uart_fm3.c,mfs_fm3.c)到工程driver --》添加自己定义的UserUART.c和UserUART.h到工程(里面有重定向printf和包含stdio.h头文件),并包含进去 --》勾选option的Target的Use MicroLIB --》添加串口初始化函数UserUART_Init(USER_UART_CH1);对应的串口号要根据重定向里的串口号修改。
B.IAR
将Library Configuration 中的Library 设置由"Normal"改为"Full" ...
FM3和FSL(M0+)问题Mark
7.15
以下是我今天的一些笔记或是值得注意不懂的 一个小结:
1.资料,平台,工具的发放,准备
2,总线地址。寻址
3.内核+外设,内核的概念。
4.内存保护单元的利用。比如故意出错等。
5.nm工艺(成本)与EMC的权衡。
6.看内存
7.两种keil,IAR开发环境的配置,驱动库的移植。
8.启动文件不要公用
9.hex bin文件烧写的区别
10.flash的擦除,主要是flash的分块,有些型号的是不同的
11.时钟配置, 启动代码 SysTick内核定时器, GPIO ,bit band 存储器映射。
技术培训的第一天 ,确实就开始感受到了这次培训的强度,学习的内容多,时间紧,所以技术培训开始的第一天就开始加班了,可能这才进入节奏,虽然一天下来高强度地接收一大堆东西,有点小累,但是很有收获很充实。
-------------------------------------------------------------------------------
...
毕设Mark!
虽然被批没得工作量,但还是把一些调试问题Mark一下,留点记忆。快点坑完,开店走人。。。
以前都能正常工作的一个函数,今天突然不行了,纠结了大半个下午这个问题,重启下电脑就好了。。。。无语了。。
串口异步通信非阻塞。一般使用多线程,,读操作和写操作在不同的线程里面,执行操作后会立即返回,而不管读写有没有成功,
在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞
最好还是用中断写串口,调了一两天的乱码的问题,从无线模块到串口,要么是最前面多个字符要么是最后少个字符,或是经常乱码(重复最后一个字符),但是奇怪的是两个程序的串口的可以,另外一个不行,都是用的查询方式,最后都改成中断的方式就行了
看来不是啥东西高级就好,以前的代码现在用就不行了,Vs2010默认的是unicode编码,好多东西都要先处理成宽字节,今天调了一天发现又是编码的问题,以前就遇到了很多的编码问题,包括Vs,python 等等,调试助手可以调通,自己写的就不行,不是不行,只是最多开始能发一两次正确的,之后就Over了
WideCharToMultiByte //unico ...