![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式
文章平均质量分 74
shareCode
闻道有先后,术业有专攻!
展开
-
Zstack Zmain流程
转载 2012-05-08 12:30:16 · 727 阅读 · 0 评论 -
Linux LCD驱动中framebuffer的研究
Linux 本身实现了FrameBuffer驱动(字符驱动)便于应用用于层调用,实现的文件是/drivers/video/fbmem.c文件:static const struct file_operations fb_fops = { .owner = THIS_MODULE, .read = fb_read, .write = fb_原创 2013-06-23 16:21:37 · 1140 阅读 · 0 评论 -
usb Mass Strorage分析(2)
USB MASS Storage驱动分层很多层次:1. 从最简单的“ 物理层”开始,先介绍一下MSC(Mass Storage Class) Device 与USB Host的结构:上图中,Storage Media,就是我们例子中的Nand Flash芯片。而例子中的那个控制芯片,是Microcontroller with embedded USB device co原创 2013-06-25 15:07:40 · 2126 阅读 · 0 评论 -
usb Mass Strorage分析(1)
接上一篇: usb-skeleton.c到 usb core层的分析对于存储设备的USB,Linux源码中有关于USB MASS Storage 的驱动程序(/drivers/usb/storage下),其中/drivers/usb/storage/usb.c 实现了驱动初始化,和usb-skeleton.c 例子以一样,调用 retval = usb_register(&usb_sto原创 2013-06-24 23:21:02 · 2444 阅读 · 1 评论 -
usb-skeleton.c到 usb core层的分析
接Linux USB 主机端 驱动程序(2.6.28)那一节的内容,说到了调用usb_register_dev函数向usbcore层(/drivers/usb/file.c)注册了static struct usb_class_driver skel_class = { .name = "skel%d", .fops = &skel_fo原创 2013-06-24 21:25:37 · 2338 阅读 · 0 评论 -
Linux MMC子系统(1)-- MMC Host层(2.6.28)
Linux 的 MMC驱动主要管理MMC卡/SD卡,从上到下分为了MMC设备层,MMC Core层,MMC Host层,Host层负责底层硬件:如下: /dev下设备文件访问MMC/SD/SDIO用户空间 |---------------------|-----------------------------------------------转载 2013-06-26 11:59:04 · 1471 阅读 · 1 评论 -
Linux TTY驱动--Uart_driver底层
Linux 中将串口驱动进行了分层,如图:本节讲解与底层硬件密切相关的层,以S3C2440为例剖析: 实现文件有:/drivers/serial/samsung.c /drivers/serial/samsung.h /drivers/serial/s3c2440.c (kernel 2.6.28),Serial Core层在/drivers/serial/ser原创 2013-06-28 15:39:03 · 20474 阅读 · 3 评论 -
Linux TTY驱动--Serial Core层
接上一节:Linux TTY驱动--Uart_driver底层一. 为了给USB-Serial类型的串口打基础(USB-Serial和Serial Core一样,构造了一个tty_driver和tty_operations,叫做usb-serial层),这里仔细分析Serial Core层完成的工作,实现代码为/drivers/serial/serial_core.c(kernel 2原创 2013-06-29 00:04:46 · 7854 阅读 · 0 评论 -
嵌入式车载平台的GPRS网络实现-续PPP协议(转)
接上一节未完的嵌入式车载平台的GPRS网络实现(转)前面以为GPRS模块直接执行AT指令就可以联网,好像不对,看了下面的知道还缺少PPP协议,那么PPP协议一般是ADSL在拨号的时候用的(PPPOE),怎么和串口通信挂钩的呢?来自:http://network.51cto.com/art/201009/224135.htmPPP设置之pppd拨号 下面我们转载 2013-06-30 23:37:20 · 3802 阅读 · 0 评论 -
Linux+libusb开发用户USB驱动程序(转)
注:在用户级的USB 驱动编写,不错,好像QT 嵌入式移植里面也是基于此的。内核级的usb驱动在以下几个方面会有问题:1 当使用我们产品的客户有2.4内核的平台,同时也有2.6内核的平台,我们要设计的驱动是要兼容两个平台的,就连makefile 我们都要写两个。 2 当我们要把linux移植到嵌入平台上,你会发现原先linux自带的驱动移过去还挺大的,我的内核当然是越小越好转载 2013-06-30 18:25:05 · 6615 阅读 · 1 评论 -
嵌入式车载平台的GPRS网络实现(转)
这篇文章觉得不错,对于利用GPRS模块进行网络数据传输的理解有很大帮助,不知道3G模块原理是不是类似,只是速度上的问题而已,因为在本人的Andiroid手机上(3G启动)进行网络程序的开发时,用的是Socket的相关API与Internet的服务器通信,而与第3点的总结不一致,待证实!总结: 1. CPU与GPRS的通信需要通过RS232,而非简单的TTL. 2转载 2013-06-30 20:08:42 · 5026 阅读 · 1 评论 -
嵌入式Linux调试方法
远程调试Linux应用程序: 1. GDBServer(开发板安装) + arm-linux-gdb(主机,命令行) 2. GDBServer(开发板安装) + arm-linux-insight (主机,图形化界面)远程调试Linux内核: 1. Kernel + kgdb(开发板) + gdb(主机端)原创 2013-09-07 09:43:41 · 1439 阅读 · 0 评论 -
DM9000A的相关总结
1.原理以FL2440为研究对象,DM9000A支持8位 16为模式,内部有64个寄存器、SRAM等,分别控制其工作,对于其寄存器的读写依靠地址端口和数据端口来控制,在系统移植的时候根据硬件连接设置:#define S3C24XX_PA_DM9000 0x20000300 #define S3C24XX_VA_DM9000 0xE0000000sta原创 2013-09-17 14:41:04 · 1591 阅读 · 0 评论 -
linux-2.6.26下开发marvell 88w8686 wifi驱动
转自: 最近在做基于2440+linux下,开发marvell 88w8686驱动 ,因为三月、硬件设计是spi接口,所以我从marvell 官方网站下载SPI 接口的驱动程序src_gspi8686.tar.bz2, 此驱动程序是基于PXA270的,所以需要自己移植到2440平台上,主要有如下工作要做:1.将src_gspi8686 下的 io 文件夹下的gspi.c转载 2014-05-08 22:33:52 · 1441 阅读 · 0 评论 -
芯片加密解密
基本概述编辑单片机(MCU)一般都有内部EEPROM/FLASH供用户存放程序和工作数据。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就叫单片机加密或芯片加密。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段转载 2014-05-13 16:45:16 · 5980 阅读 · 1 评论 -
关于stc51的冷启动下载和复位
关于stc51的冷启动下载和复位 Stc单片机里面有一段出厂时固化的程序,这段程序的作用是检测串口是否要下载程序,不需要则执行单片机内的用户程序。每次启动时运行这端程序,这就是为什么每次下载时要冷启动。而复位后单片机是从地址0000H处开始执行,地址0000H又会指向主程序入口,即主函数处,即片内下载的用户程序而不会执行前面已经固化的检测串口那段程序。这就是为什么单片机每次下载要冷启动,而复位转载 2014-05-13 15:40:31 · 5776 阅读 · 0 评论 -
DMA基本概念及linux2440下DMA驱动程序编写与测试
DMA基本概念及linux2440下DMA驱动程序编写与测试分类: linux 6410驱动2013-02-25 19:11 1063人阅读 评论(5) 收藏 举报转自:http://blog.techbulo.com/tech/artical/1462.html1、基本概念DMA即Direct Memory Access(直接存储器存取),那么为什么要转载 2014-10-14 14:41:17 · 816 阅读 · 0 评论 -
Linux MTD层的研究(Nandflash)
花了点时间学习Linux MTD层,下面简单总结一下!以下是MTD层的结构图 MTD层实现了文件系统与Flash之间的桥梁,下面就粗略说明字符型MTD驱动与下层驱动的关系。分析对象:/drivers/mtdchar.c 字符型mtd设备字符设备中定义了mtd_fops字符类的文件指针操作函数,完成字符设备读写与打开等功能。1. static int mtd原创 2013-06-22 19:15:12 · 4663 阅读 · 0 评论 -
MMU(深入浅出)
一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多转载 2013-06-04 15:57:18 · 1569 阅读 · 0 评论 -
ZStack API解读3
应用框架(AF)应用框架层是应用道APS层的OTA数据接口。此层也接收数据消息的终端多路复用器。AF为应用提供以下功能:· 终端(Endpoint)管理· 发送和接收数据哈哈,这里的函数应该就是我们经常要用到的函数了。终端管理每个设备都是Zigbee中的节点,每个节点有长地址和短地址,短地址被其他设转载 2012-05-08 12:26:45 · 786 阅读 · 0 评论 -
zigbee协议与开发-ZStack协议栈结构的初步解析
int main( void ){ // Turn off interrupts(关中断) osal_int_disable( INTS_ALL ); // Initialization for board related stuff such as LEDs(初始化板上组件,如LED) HAL_BOARD_INIT(); // Make sure supply vol转载 2012-05-08 12:33:27 · 1200 阅读 · 0 评论 -
request_irq函数
#include int request_irq(unsigned int irq, void (*handler)(int irq,void dev_id,struct pt_regs *regs), unsigned long flags, const char *device, void *dev_id); void free_irq(unsigned int ir转载 2012-09-29 14:16:24 · 949 阅读 · 0 评论 -
S3C2440 USB 设备控制器(转)
S3C2440 USB 设备控制器 s3c2440 soc集成了一个usb1.1设备控制器,可以进行全速/低速的控制,中断与批量传输。除了端点0,具有四个端点,每个端点都可以作为中断与批量的端点,每个端点具有128 byte的FIFO,所以端点最大packet可以设置成128byte。并且支持DMA传输。任何一种设备控制器对于软件来说都是一组寄存器:数据,状态,控制。usb转载 2012-10-07 16:48:11 · 1674 阅读 · 0 评论 -
Linux usb 设备驱动 (1)
Linux USB驱动框架分析(一) Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。由于Linux的内核用c来编写,所以我们也按照这种结构化的思想来分析代码,但我还是希望从OO的角度来阐述这些细节。这个结构体的名字有驱动开发人转载 2012-10-30 19:34:58 · 796 阅读 · 0 评论 -
Linux usb设备驱动(2)---> usbmouse.c 源码分析
一个 USB 总线引出两个重要的链表,一个为 USB设备链表,一个为 USB驱动链表。设备链表包含各种系统中的 USB设备以及这些设备的所有接口,驱动链表包含 USB设备驱动程序(usb device driver)和 USB驱动程序(usb driver)。 1. USB设备驱动程序(usb device driver)和 USB驱动程序(usb driver)的区别是什转载 2012-10-30 19:35:53 · 1280 阅读 · 0 评论 -
Linux gadget USB设备端驱动程序(kernel 2.6.28)
一、几个重要设备端Gadget驱动结构体:1. struct usb_gadget {//代表一个UDC设备 /* readonly to gadget driver */ const struct usb_gadget_ops *ops; //设备的操作集 struct usb_ep *ep0; //ep0原创 2012-11-03 15:18:33 · 9291 阅读 · 1 评论 -
Linux USB 主机端 驱动程序(2.6.28)
一、几个重要USB Core驱动结构体:1. 驱动:struct usb_driver { const char *name; int (*probe) (struct usb_interface *intf, const struct usb_device_id *id); // 一般用于USB设备挂接时候的初始化工作,被USB Core驱动调用(原创 2012-11-03 17:32:53 · 2179 阅读 · 0 评论 -
ramdisk驱动程序分析-2.6内核--块设备驱动框架(1)
块设备驱动用到的重要结构体与函数如下红色表示部分。快设备驱动的模块加载函数中通常需要完成如下操作:1. 分配、初始化请求队列,绑定请求队列request_queue和请求函数;2. 分配、初始化gendisk,给gendisk的major,fops,queque等成员赋值,最后添加gendisk;3. 注册快设备驱动。本代码源自“LINUX设备驱动开发技术及转载 2012-11-04 16:36:19 · 1131 阅读 · 0 评论 -
FL2440 Linux kernel + yaffs2根文件移植过程(一)
本文全过程为自己亲自试验,其中经历了很多挫折,但功夫不负有心人,终于在自己的努力下(当然也要感谢写博客的朋友们)成功移植了一个最基本功能的Kernel、根文件系统,现在将这个一耗时、耗精力 的过程写下来,希望对遇到相同问题的朋友们有所帮助!平台:飞凌FL2440 windows xp sp2 vmware 7.0.0 build-20373原创 2012-11-16 16:08:57 · 6665 阅读 · 2 评论 -
FL2440 Linux kernel + yaffs2根文件移植过程(二)
上一篇文章中Kernel移植基本上没有什么大的问题,除了几处需要更改外(已经注明)make zImage后,内核生成成功,下面是关于yaffs2根文件的移植,移植过程蜿蜒曲折,现现将成功移植过程讲解,后附过程与问题。一、移植过程(成功)busybox-1.19.4cross3.4.1(FL2440关盘里的交叉编译器)1. 下载busybox-1.19.4.tar.bz2,地址是原创 2012-11-16 19:46:51 · 2797 阅读 · 1 评论 -
TDI过滤驱动分析
转自:http://www.longene.org/forum/viewtopic.php?t=446目录0 介绍0.1 TDI驱动作用0.2 Windows NT网络总体结构1. 过滤设备1.1 绑定目标1.2 分发函数1.3 过滤地址1.4 过滤内容1.4.1 过滤HTTP1.4.2 过滤DNS2. VISTA网络结构3.转载 2013-01-15 21:22:23 · 5119 阅读 · 0 评论 -
UCOS-II 中断与时钟问题总结(以UCOS2.25自带的X86例子)
这两天在看UCOS-II, uCOS中断和时钟问题做个小结,以UCOS2.25自带的X86例子、《嵌入式实时操作系统uCOS-II原理及应用》为基础,相信对网友们也有帮助,理解不对的地方,请高手指正: UCOS-II是抢占式、实时操作系统,这是核心。 1. uCOS的系统有任务级任务调度和中断级任务调度:任务级任务调度靠常常在下面的代码中自动调用,void main原创 2013-05-24 11:57:54 · 5824 阅读 · 0 评论 -
UCOS-II常用变量说明
1, OSRunning 在ucos_II.h中定义,声明为BOOLEAN数据类型,这个变量用于指示OS是否正在运行。 “1”为运行状态,反之为未运行态。2, OSPrioCur 在ucos_II.h中定义,声明为INT8U数据类型,表示当前任务的优先级。3, OSPrioHighRdy 在ucos_II.h中定义,声明为INT8转载 2013-05-24 17:44:39 · 2004 阅读 · 0 评论 -
多级页表如何节省进程页表空间
:如果使用简单的一级页表,如果进程使用全部4G线性地址空间,那么将需要高达2^20表项(总共地址线是32位,每页大小为4kb,则页偏移量需要低12位,高20位当作页表地址)来保存表示每个进程的页表,若每项4B,则需要4MB的ram来存储页表。即使一个进程并不使用内的所有地址。 书上提出:使用这种二级模式能够减少每个进程页表所需RAM数量。开始一直没想通,为什么节省了呢?从你最终转载 2013-06-04 17:59:35 · 11001 阅读 · 1 评论 -
MMU 裸机程序
来自:http://blog.sina.com.cn/s/blog_49d9a0820100e37l.html一级页表////////////////////////////////////head.S//////////////////////////////////////////////////////////////////////@******************转载 2013-06-04 14:49:17 · 1074 阅读 · 0 评论 -
关于优先级反转
转自:http://www.blogjava.net/killme2008/archive/2009/06/28/284459.html在多进程、多线程并发的环境里,从概念上看,有多个进程或者多个线程在同时执行,具体到单个CPU级别,实际上任何时刻只能有一个进程或者线程处于执行状态;因此OS需要决定哪个进程执行,哪些进程等待,也就是进程的调度。一、调度的目标1、首先要区分程转载 2013-06-04 21:05:52 · 1222 阅读 · 1 评论 -
Linux内核多线程实现方法 —— kthread_create函数
Linux内核多线程实现方法 —— kthread_create函数 内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread)完成独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。实际上,内核线程只能由其转载 2014-10-14 14:54:12 · 15012 阅读 · 0 评论