自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

简单博客

嵌入式软硬件

  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 spi总线设备驱动模型详解(Linux3.4)

(一)spi总线设备驱动框架: app: open() read() write() ------------------------------------------------------------------ 系统调用 ---------------------...

2019-04-01 11:54:38 1556 1

原创 嵌入式Linux基本开发环境搭建

#! /bin/bash#-----------------------------------------------------------------------------------#Author: Qyzhu#Date:2020/11/28#EVersion:V0.1#Function: Modify software source# Install build-essential# vsftpd# o...

2020-11-28 14:23:38 387

原创 VS环境下动态库和静态库的建立和使用

1 动态库和静态库的定义1.1 库的定义库是写好的现有的,成熟的,可以复用的代码。所谓静态、动态是指链接。 静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。 动态库在程序编译时并不会被链接到目标代码中,而是在程序运行是才被载入。动态库链接的程序运行速度比静态库链接的慢。为什么还需要动态链接?...

2020-04-26 18:04:43 1007

原创 JZ2440开发板移植Qtopia2.2.0

参考文献: 《嵌入式Linux应用开发》韦东山编著 http://emb.hqyj.com/column/column97.htm(1)移植环境: 环境:ubuntu9.10 gcc: 4.4.1 arm-linux-gcc: 3.4.5(2)移植Qtopia依赖的库 ① 编译、安装j...

2019-07-12 15:44:53 540

原创 sysfs和proc文件系统解析

(1)sysfs 1.1)Linux设备驱动模型中的总线、驱动和设备都可以在sysfs文件系统中找到对应的节点。当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中生成一项新的记录它会产生一个包括所有系统硬件的层级视图。 1.2)把连接在系统上的设备和总线组织成一个分级的文件,他们可以由用户空间存取,向用户空间导出内核数据结构以及它们的属性。sys文件系...

2019-07-02 22:01:52 2061 1

原创 Nand Flash驱动程序编写(linux 3.4.2内核)

参考文件 drivers\mtd\nand\s3c2410.c(当内核启动时,会打印相关nand的信息,搜索相关打印信息,找到这个文件) 内核提供的nand flash 驱动例子,从这个例子中我们可以总结出nand flash 的框架,进而总结出如何写一个nand_flash驱动程序。(1)内核源代码中支持s3c开发板的nand flash 驱动程序分析。s3c2410...

2019-07-02 21:56:50 403

原创 Input子系统详解-基于Linux2.6.22内核

(1)输入子系统框架Input子系统框架app: open() read() write()---------------------------------------------内核: xxx_drv的 fos 结构体里面的 xxx_open() xxx_write xxx_write-----------------------------...

2019-06-06 12:14:30 313

原创 (1)电源管理-S3C2440芯片电源管理模块解析

(1)电源模块解析 电源管理块通过软件控制系统时钟,以降低S3C2440的功耗。这些方案涉及锁相环、时钟控制逻辑(FCLK、HCLK和PCLK)和唤醒信号。图1显示了S3C2440A的时钟分布。 图...

2019-06-01 16:46:17 4581

转载 Ubuntu16.04安装gcc-3.4

第一步:下载所需gcc安装包(.deb格式)手动:老版本gcc下载地址:http://old-releases.ubuntu.com/ubuntu/pool/universe/g/;http://archive.ubuntu.com/ubuntu/pool/universe/g/自动:wgethttp://old-releases.ubuntu.com/ubunt...

2019-06-01 09:56:09 6936 2

原创 I2C总线设备驱动框架

编写I2C驱动程序,我们可以参考 \linux-3.4.2\Documentation\i2c 中的一些文档(1)大致框架app:   open  read write-----------------------------------------------------------------------设备驱动层:知道数据的含义xxx_read()    xxx_write(...

2019-02-27 11:37:54 241

原创 摄像头驱动框架(v4l2)详细分析

          在分析v4l2(video for linux 2.0)框架之前,我们需先了解驱动程序分层的概念。          所谓分层,其实是利用了面向对象的思想---继承,我们知道,子类继承父类,并且对于父类提供的资源,合则用,不合则改(重载)。对于某一类驱动程序,内核把这一类驱动相同的部分提取出来单独作为一层,这一层称为核心层,它向应用层提供这一类驱动程序的统一接口。而这一类驱...

2018-12-18 23:13:47 2655

转载 不带缓存I/O和标准I/O(带缓存)之间的区别

先来看看不带缓存的I/O和标准(带缓存的)I/O都有那些不带缓存的I/O:       read,write,open......标准(带缓存的)I/O: fgets,fread,fwrite.....这里使用两个对应的函数进行比较:ssize_t write(int filedes, const void *buff, size_t nbytes)size_t fwrite(cons...

2018-11-18 17:45:08 1242 3

转载 虚拟机下Ubuntu16.04桥接模式不能上网问题解决

桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces发现没有dhcp配置的信息,只有loopback:手动添加:# The primary network interfaceauto ens33iface ens33 inet dhcp(在添加之前先...

2018-10-27 17:04:35 7616 1

原创 输入子系统框架详解

输入子系统框架详解(1)为什么要使用输入子系统框架       我们在刚开始学习字符设备驱动程序的编写时,都会用到这样一个框架:      首先分配一个主设备号( alloc_chrdev_region(),推荐用这个函数 ),接着填充file_opreation 结构体(这是字符设备驱动程序编写的关键点),再接着在入口函数里面调用字符设备注册函数等,最后编写出口函数,不要忘记修饰入口...

2018-09-16 13:59:19 904

原创 Linux设备驱动之poll机制

       应用程序调用的任何库函数,最终将会调被库函数封装的系统函数 ,此过程中发生swi中断,用户进程从用户状态变成了核心态,当我们的应用程序调用pool() 函数时,最终调用的是 sys_poll() 函数。       sys_poll()的函数原型如下:       asmlinkage long sys_poll(struct pollfd __user *ufds, uns...

2018-09-08 19:02:28 411

转载 Makefile 使用总结

 1. Makefile 简介Makefile 是和 make 命令一起配合使用的.很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂.Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作. 这个需要大家发挥自己的想象力.非常感谢 gung...

2018-08-27 18:51:39 318

转载 深入理解nandflash基本特性

nandflash作为嵌入式中的”磁盘”, 被广泛的应用, 以(K9F2G08U0B)为例,其他型号都差不多nandflash的结构  nandflash的结构有页(page), block(块)的概念,其中页是真实概念,而块儿是虚拟概念(目的是为了更好的管理存储空间)  page: 一个page大小为2K + 64bytes, 如上图所示,其中的64bytes是所在页的infomatio...

2018-07-25 11:44:54 1157

原创 Nor Flash的一般操作(通用)

    Nor Flash具有其独特的数据保护机制,它可以像内存一样读,但是它不可以像内存一样写,这就会导致我们在向Nor Flash中写数据时会稍显麻烦。这篇文章介绍Nor Flash 的一般操作,适合大多数的Nor Flash芯片,笔者使用的芯片是MX29LV160D T/B,容量为2MB。    拿到一款Nor Flash芯片,我们首先简明扼要的浏览数据手册上芯片的特性(FEATURES...

2018-07-24 11:58:28 15730

原创 三步搞定32位芯片中断程序的编写

(1)初始化      1.1 设置中断源,让它能够发出中断信号。      1.2 设置中断控制器,让它能够把中断信号传递给CPU,一般是设置中断屏蔽寄存器,中断优先级控制寄存器。      1.3 设置CPU,使之能够接受中断,即开系统中断。 (2)处理中断     2.1 在启动文件中,设置相应中断的堆栈指针,接着保护现场,执行入栈操作     2.2  在启动文...

2018-07-21 17:43:28 779

转载 ARM指令集详解

ARM指令集详解1.       汇编1.1.    通用寄存器 通用寄存器37个寄存器,31个通用寄存器,6个状态寄存器,R13堆栈指针sp,R14返回指针,R15为PC指针, cpsr_c代表的是这32位中的低8位,也就是控制位CPSR有4个8位区域:标志域(F)、状态域(S)、扩展域(X)、控制域(C)MSR - Load specified fields of...

2018-07-18 23:48:27 50519 4

原创 代码重定位解析

一  代码的组成程序至少包含:代码段+数据段代码段:.text数据段:.data一般存储全局变量,初值不为0的经过初始化的全局变量        如:char g_char ='A';    //初值为A的字符型全局变量只读数据段:.rodataconst的全局变量,只读数据段.bss:初值为0,或者没有初值的全局变量,不保存在bin文件中    如:int g_A =0;            ...

2018-07-15 18:04:59 3211 1

原创 看英语数据手册很难?5步帮你搞定!

      阅读数据手册是一个工程师的必备技能,拿到一份数据手册,特别是英文数据手册,如何去读,才能更快更好的找到自己想要的东西?      坚信:阅读英文手册,并没有想象的那么难      不管什么芯片手册,都只是使用说明书而已。而说明书一个最显著的特点就是必须尽可能地使用通俗易懂的语句,向使用者交代清楚该产品的特点、功能以及使用方法。运用在大学里所学到的那些英文知识去分析这些手册,足矣。数据手...

2018-07-07 10:40:35 4168

原创 用串口实现简单的printf函数

       在VC6中,打开printf函数的源代码,发现这个函数的代码量无比巨大,闲来无事,自己用C写了一个简单的printf函数,只实现了VC库中printf函数的部分简单功能,贴出自己写的代码只为抛砖引玉,娱人娱己,仅此而已!     printf.h  头文件#ifndef _prinrf_h#define _printf_h#include "uart.h"typedef  char ...

2018-06-16 17:12:39 7664

原创 关于volatile的几点理解

       volatile翻译成中文就是不稳定的、反复无常的。它的功能简单地说就是防止编译器对代码进行优化。比如如下程序:1234XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x58;对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三...

2018-06-10 15:35:11 193

原创 s3c2440芯片串口操作

       S3C2440A通用异步接收器和发射机(UART)提供了三个独立的异步串行输入/输出(SIO)端口,每个端口都可以在中断或基于dma的模式下运行。换句话说,UART可以生成一个中断或DMA请求来在CPU和UART之间传输数据。UART可以使用系统时钟,支持波特率高达921.6 Kbps。如果外部设备提供UEXTCLK,那么UART可以以更高的速度运行。每个UART通道包含两个64字节...

2018-06-10 15:23:49 944

原创 S3C2440芯片时钟配置

        S3C2440A芯片中的时钟控制逻辑可以生成所需的时钟信号,包括用于CPU的FCLK、AHB (Advanced High-performance Bus) 总线外围设备的HCLK,以及APB (Advanced Peripheral Bus)总线外围设备的PCLK。S3C2440A有两个相锁循环(PLLs):一个用于FCLK、HCLK和PCLK,另一个用于USB块(48 Mhz)...

2018-06-09 15:19:35 1478

原创 Ubuntu下VI编辑器命令总结

vi编辑器有三种模式1)命令行模式(光标移动、复制、粘贴、删除)(command mode)2)插入模式(编辑文本)                                    (insert mode)3)底行模式(查找和替换)                                (last line mode)注意:1)当不知道处于何种模式时,按ESC键返回到命令行模式。2...

2018-06-05 10:51:49 9290

原创 实用小程序(cdecl)-C声明语句解析

#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>#define MAXTOKENS 100                      //定义在一个声明语句第一个标识符之前的最大标记个数#define MAXTOKENLENS 64              ...

2018-05-26 16:21:50 682

原创 LwIP协议栈的网络接口管理

    本文论述的网络接口属于链路层的范畴。运行LwIP的嵌入式设备可以有很多个网络接口,这些网络接口的种类可以互不相同。有效的管理这些网络接口就显得尤为必要。    在netif.h和netif.c文件中定义和实现了所有的和网络接口相关的数据结构和函数,接下来我们看下在netif.h文件中定义的netif结构类型,nitif结构描述了网络接口所有的属性。netif.h文件中的部分定义:   #d...

2018-05-22 16:32:29 1125

原创 LwIP协议栈的数据包管理

      首先,谈谈数据包管理的重要性。我们知道TCP/IP协议机构中,每一层都被描述成独立(各个层被封装)的模块,每一层负责完成自己独立的事情。这样在性能优良的处理器上跑TCP/IP协议是没有问题的,一断我们的处理器很LOW的时候,特别是嵌入式开发的时候,这样做就不行。因为每一层都独立后,每一层之间的通信涉及到繁琐的数据的复制传递,这既消耗内存,也耗费时间。      LwIP协议栈是TCP/...

2018-05-21 14:02:00 1032

转载 LwIP协议栈的内存管理

case PBUF_POOL:p = memp_malloc(MEMP_PBUF_POOL);case PBUF_RAM:p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); case PBUF_ROM: case PBUF_REF:...

2018-05-20 16:53:09 987

原创 TCP/IP协议简介

     TCP/IP协议完整地包含了一些列构成互联网基础的网络协议。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。  1)网络接口层       这是TCP/IP协议的最底层,主要负责网络上数据帧的接受和发送,数据帧是底层网络传输的基本单元。由于网络接口有不同的实现方式(有线或者是无线)...

2018-05-20 16:28:03 1356

原创 判断字符变量是否为字母或者是数字

原型:extern int isalnum(int c);用法:1#include <ctype.h>/* 包含 <ctype.h> */功能:判断字符变量c是否为字母或数字说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。...

2018-05-13 15:13:08 4352

原创 C语言中清空数组的方法(VS2013)

在C语言中,有的时候需要清空数组,以待存储接下的数据,常规的方法有:(1)循环方法        char a[ ]="aaaaaaaa";                                 //定义字符数组        for (unsigned int i = 0; i < strlen(a); i++)              a[i] = '\0' ;  ...

2018-05-13 14:29:44 110232

原创 关于sizeof正确的理解

       最近在很多地方看到很多人在C语言中把sizeof当成一个函数来理解,包括有10多年C经验的人,我感到十分惊讶。今天给大家纠正一下错误的概念:sizeof是一个操作符,不是函数sizeof操作符的三种用法:sizeof(object);//sizeof(对象);sizeof(type_name);//sizeof(类型);sizeof object;//sizeof对象;       ...

2018-05-08 11:42:42 576

原创 Cortex-M3内核之位带操作

       位带操作(Bit-Band Operations ),顾名思义,就是开发人员可以单独对CPU寄存器的某一位进行读写操作,这无疑将会简化我们开发代码的难度。我们也许已经在8051单片机中体会到了这种位带操作带来的好处,比喻说我要点亮一盏LED灯(假设这里LED灯的阴极已接地),通常只需要下面两行代码就可以完全搞定:       sbit LED=PX^n;     LED=1;    ...

2018-04-26 19:59:21 8747

ADS7809驱动程序(C语言)

记载了ADS7809外部时钟下的驱动代码和内部时钟下的驱动代码

2018-04-26

jz2440开发板移植qtopia-free-2.2.0补丁文件

环境:ubuntu9.10 gcc: 4.4.1 arm-linux-gcc: 3.4.5 完整移植教程:https://blog.csdn.net/u014069939/article/details/95624978

2019-07-13

jz2440开发板Qtopia-2.2.0补丁文件

环境:ubuntu9.10 gcc: 4.4.1 arm-linux-gcc: 3.4.5 完整移植教程:https://blog.csdn.net/u014069939/article/details/95624978

2019-05-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除