自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

转角遇到嵌入式

誓以春哥的霸气,凤姐的自信征服嵌入式!

  • 博客(55)
  • 收藏
  • 关注

原创 深度分析NandFlash—start.s中添加从Nand Flash启动的代码分析

<br />      搞过uboot移植的人都知道,要想让系统从NandFlash启动,第一步就是要在start.s中屏蔽掉从Nor Flash启动的代码,然后自己添加从Nand Flash启动的代码,我添加的代码如下:<br />   <br />/****** NAND_BOOT ********/<br /> <br />#define LENGTH_UBOOT 0x60000<br />#define NAND_CTL_BASE 0x4E000000<br /> <br />#ifdef CONF

2011-04-02 14:29:00 2358

原创 深度分析NandFlash—控制器参数TACLS、TWRPH0和TWRPH1的确定(以TQ2440开发板上的K9F2G08U0A为例)

<br />      这三个参数对于NandFlash的读写操作来说是比较重要的,没搞清楚这三个参数,后面的事就不用提了,那这三个参数到底是干什么的呢,我们怎么样去配置他们呢,今天我花了点时间研究了一下这三个参数。在datasheet中对他们的时序有下面两种图示,一种是写命令或者地址的情况,一种是读写数据的情况:<br />  <br /><br />由上图可知,这三个参数控制的是Nand Flash 信号线CLE/ALE与写控制信号nWE的时序关系。<br />TACLS:表示CLT/ALE的建立时间(

2011-03-18 17:36:00 8974 5

原创 深度分析NandFlash—硬件实现机制

<br />       最近看了好久的NandFlash,总算是有了一点感觉,但一直没有系统的整理一下,脑子里很乱,今天刚好公司的很多人都出去旅游了,所以工作不是很忙,就在这里好好整理一下吧。首先当然是最基础的了,NandFlash的硬件实现机制。<br />       Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中

2011-03-18 11:18:00 2895 1

原创 Linux2.6进程调度分析(3)-与调度有关的函数分析

前面两篇文章从原理角度分析了进程的调度,本文将从具体的源码出发,分析与进程进程调度密切相关的几个函数。1.时间片的分配:task_timeslice()正如我们所知的那样,进程的时间片与进程的静态优先级有直接的关系。从代码中可以看到,根据进程静态优先级static_prio与NICE_TO_PRIO(0)的大小关系,进程时间片的分配可以分为两条路线。以下代码如无特别说明均位于linux/kernel/sched.c下。view sourceprint?1staticunsigned inttask_time

2011-04-12 17:22:00 1318 1

原创 Linux2.6进程调度分析(2)-调度算法

2.调度算法Linux2.4版本的内核调度算法理解起来简单:在每次进程切换时,内核依次扫描就绪队列上的每一个进程,计算每个进程的优先级,再选择出优先级最高的进程来运行;尽管这个算法理解简单,但是它花费在选择优先级最高进程上的时间却不容忽视。系统中就绪进程越多,花费的时间就越大,时间复杂度为O(n)。而2.6内核所采用的O(1)算法则很好的解决了这个问题,从它的名称就可以看出,不管系统中可运行的进程有多少,该算法总能在有限的时间内选择出优先级最高的进程。2.1可运行队列调度程序每次在进程发生切换时,都要在就绪

2011-04-12 17:18:00 1879

原创 Linux2.6进程调度分析(1)-调度策略

<br /> <br />对于分时操作系统而言,表面上看起来是多个进程同时在执行,而在系统内部则进行着从一个进程到另一个进程的切换动作。这样的进程并发执行涉及到进程切换(process switch)和进程调度(process scheduling)两大问题。本文主要说明Linux2.6中的普通进程调度策略(实时进程和普通进程在调度上稍有不同)问题,即系统何时进行进程切换以及选择哪一个进程进行切换。1.调度策略<br />理想的进程调度目标应该是:进程响应时间尽可能的快,后台作业吞吐量高,避免某些进程出现饥

2011-04-12 17:16:00 1928

翻译 嵌入式经典面试题

<br />C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。<br />    从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢 的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间

2011-04-11 17:01:00 6984 6

转载 U-Boot编译过程完全分析

<br />2.1       U-Boot Makefile分析2.1.1             U-Boot编译命令<br />       对于mini2440开发板,编译U-Boot需要执行如下的命令:<br />$  make  mini2440_config<br />$  make  all<br />       使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录中。为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的

2011-04-11 15:15:00 1586

转载 U-Boot启动过程完全分析

<br />1.1       U-Boot工作过程<br /> <br />U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:<br />       (1)第一阶段的功能<br />Ø  硬件设备初始化<br />Ø  加载U-Boot第二阶段代码到RAM空间<br />Ø  设置好栈<br />Ø  跳转到第二阶段代码入口<br />       (2)第二阶段的功能<br />Ø  初始化本阶段使用的硬件设备<br />Ø  检测系统内存映射<br />Ø  将内核从Flash读取到R

2011-04-11 15:00:00 1323

转载 【新人培训之终极目标】 kernel新手培训计划

原本是我用Notes mail 写的培训kernel新人的计划,copy过来 有些格式可能有点乱, 附件里面是 我举的例子。 新手可以对照。 老手就不要看了,见笑了。  如果你从事kernel还没有入门, 或者在公司里面根本论不到你作kernel , 也许你可以对照我的计划自学。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ <br />下面是我列出的新人kernel 学习计划, kernel很复杂,

2011-04-02 17:24:00 1111

原创 Linux USB 鼠标驱动程序解析

<br />USB 总线引出两个首要 的链表! <br />  一个 USB 总线引出两个首要 的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。 <br />  USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)的区别是什么? <br />  USB 设备驱动程序包含

2011-04-02 17:05:00 1064

原创 Linux驱动中,probe函数何时被调用

最近看到linux的设备驱动模型,关于Kobject、Kset等还不是很清淅。看到了struct device_driver这个结构时,想到一个问题:它的初始化函数到底在哪里调用呢?以前搞PCI驱动时用pci驱动注册函数就可以调用它,搞s3c2410驱动时只要在mach-smdk2410.c中的struct platform_device *smdk2410_devices {}中加入设备也会调用。但从来就没有想过具体的驱动注册并调用probe的过程。<br /><br />于是打开SourceInsigh

2011-04-02 17:03:00 2351

转载 socket和多线程可移植性编程基础

<br />1 前言<br />2 Socket编程<br />2.1 Socket通信机制<br />2.2 socket通信示例图<br />2.3 Socket在不同平台上的实现<br />2.3.1 Socket在Windows平台中的实现<br />2.3.2 Socket在Linux/Unix平台中的实现<br />2.3.3 可移植的启动和结束调用代码<br />2.3.4 其它移植问题<br />3 多线程编程<br />3.1 线程与进程的不同<br />3.2 线程冲突与数据保护<br

2011-04-02 16:59:00 990

转载 linux下request_mem_region的粗略理解

<br />linux下request_mem_region的粗略理解<br />文章来源:http://gliethttp.cublog.cn<br />  Linux把基于I/O映射方式的I/O端口和基于内存映射方式的I/O端口资源统称为“I/O区域”(I/O Region)。I/O Region仍然是一种I/O资源,因此它仍然可以用resource结构类型来描述。<br />  Linux是以一种倒置的树形结构来管理每一类I/O资源(如:I/O端口、外设内存、DMA和IRQ)的。每一类I/O资源都对应

2011-04-02 16:58:00 1044

原创 Linux内核时钟框架

<br />逢山开路 遇水架桥,今天想自己写个adc的驱动,发现不清楚系统各个模块的系统时钟如何使用。总不能自己想怎么弄,就怎么弄吧,还是学学框架吧——使用时钟的框架。adc_clock = clk_get(NULL, "adc");<br /><br />if (!adc_clock) {<br /><br /> printk(KERN_ERR "failed to get adc clock source/n");<br /><br />return-ENOENT;<br /><br />

2011-04-02 16:55:00 1111

原创 Linux设备驱动的分层设计思想

1.1 设备驱动核心层和例化在面向对象的程序设计中,可以为某一类相似的事物定义一个基类,而具体的事物可以继承这个基类中的函数。如果对于继承的这个事物而言,其某函数的实现与基类一致,那它就可以直接继承基类的函数;相反,它可以重载之。这种面向对象的设计思想极大地提高了代码的可重用能力,是对现实世界事物间关系的一种良好呈现。Linux内核完全由C语言和汇编语言写成,但是却频繁用到了面向对象的设计思想。在设备驱动方面,往往为同类的设备设计了一个框架,而框架中的核心层则实现了该设备通用的一些功能。同样的,如果具体的设

2011-04-02 16:54:00 1051

转载 platform_device和platform_driver

首先介绍一下注册一个驱动的步骤:<br />1、定义一个platform_driver结构<br />2、初始化这个结构,指定其probe、remove等函数,并初始化其中的driver变量<br />3、实现其probe、remove等函数<br />看platform_driver结构,定义于include/linux/platform_device.h文件中:<br />struct platform_driver {<br />int (*probe)(struct platform_device

2011-04-02 16:52:00 1141

转载 Linux设备驱动开发环境的搭建

<br />经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助。<br />刚接触Linux设备驱动时,初学者往往连如何编译驱动程序都不懂,更别说编译进内核或加载测试了。一般都是在网上找个最简单的 helloworld驱动程序,然后严格按照网上所说的步骤编译,结果却得到一大堆见都没见过的错误,更不要说根据错误信息来解决问题了,很多人到这里就 不知道如何往下进行了。十几天前我也卡在这里很长时间,现在知

2011-04-02 16:49:00 1447

转载 Android在TQ2440开发板上的移植

<br />Android在TQ2440开发板上的移植<br />一、目前进展<br />1.Android已经可以通过NFS在TQ2440开发板上运行<br />2010.03.12 update:最近自己编译了android的文件系统,并在TQ上运行了,比熊猫版的bin程序多些,基本功能已经实现,大家可以从:<br />http://d.namipan.com/d/b64ce43b2388e5e1f66af18149824b98cd13b926c4921f02<br />下载文件系统试试,改天整理一下,

2011-04-02 16:48:00 2244

原创 u-boot-2011.03在TQ2440上的移植(5)—实现Nand/Nor 双启动

<br />1、在做u‐boot移植的时候,多数人使用的是Nand FLASH启动或Nor FLASH启动。这样u‐boot就只能在Nand FLASH或Nor FLASH。那么我们如何让我们的u‐boot在Nand FLASH或Nor FLASH都能使用。u-boot是系统启动前执行的一段程序,如果是放在Nandflash中的,那么u‐boot自己可以把自己搬移到内存中执行。<br />2、根据s3c2440数据手册得知:<br /><br />对于Nand的操作和Nor的操作是完全不同的,选择Nor F

2011-04-02 14:56:00 1997

原创 u-boot-1.1.6 源码分析(3)--第二阶段

<br />上接第一阶段跳转语句<br />ldr  pc,  _start_armboot<br />第二阶段流程图 1。第二阶段的主线函数位于u-boot-2010.06/arch/arm/lib/board.c。<br />第二阶段的功能:<br /><1> 初始化本阶段要使用到的硬件设备。<br />设置时钟、初始化串口。<br />board_init函数设置MPLL、改变系统时钟,它是开发板相关的函数,在board/samsung/smdk2440/smdk2440.c中实现。值得注意的是boa

2011-03-23 15:28:00 2485 1

转载 u-boot-1.1.6 源码分析(2)--第一阶段

1。第一阶段完成的功能 u-boot-2010.06/arch/arm/cpu/arm920t/start.S硬件初始化。设置CPU工作模式为管理模式(svc)  关闭开门狗  设置FCLK,HCLK,PCLK的比例(即设置CLKDIVN)  关闭MMU.CACHE为加载Bootloader的第二阶段代码准备RAM空间。所谓准备RAM空间就是初始化内存芯片,使其能正常工作。在start.S中调用lowlevel_init 函数来设置存储控制器,使得外接的SDRAM可用。代码在board/samsung/sm

2011-03-23 15:26:00 1715

转载 u-boot-1.1.6 源码分析(1)--总体结构

<br />参考资料:<br />1 tekkaman博客<br />2 韦东山《嵌入式linux应用开发完全手册》第15章<br />3   http://www.arm79.com/<br />1。到ftp://ftp.denx.de/pub/u-boot/下载u-boot-2010.06.tar.bz2,解压进入根目录,列出根目录文件。源码整体框架如下:<br />蓝色:目录<br />黑色:文件<br />绿色:可执行文件<br />[root@localhost u-boot-2010.06]#

2011-03-23 15:25:00 1741

原创 U-Boot的常用命令详解

U-Boot还提供了更加详细的命令帮助,通过help命令还可以查看每个命令的参数说明。由于开发过程的需要,有必要先把U-Boot命令的用法弄清楚。接下来,根据每一条命令的帮助信息,解释一下这些命令的功能和参数。<br /><br />1、bootm<br />bootm [addr [arg ...]]<br /><br />- boot application image stored in memory<br /><br />passing arguments 'arg ...'; when booti

2011-03-23 09:42:00 1107

原创 u-boot-2011.03在TQ2440上的移植(11)--支持USB下载

参考资料http://chxxxyg.blog.163.com/blog/static/1502811932010813115518537/http://blog.chinaunix.net/u3/105764/showart_2144192.html1。在drivers/usb/下面建立新目录mkdir /drivers/usb/slave拷贝那个chxxxyg给的源代码。2。修改uboot根目录下的Makefeils,添加红色部分代码LIBS += drivers/usb/musb/libusb_mus

2011-03-23 09:27:00 3391 1

原创 u-boot-2011.03在TQ2440上的移植(10)--支持串口xmodem协议

1、在windows下的SecureCRT只支持Xmodem和Zmodem,为了方便在Windows下载U-Boot,现在修改代码增加对Xmodem的支持,即增加一个命令loadx。vi common/cmd_load.c在ymodem命令下添加xmodem命令U_BOOT_CMD( loady, 3, 0, do_load_serial_bin, "load binary file over serial line (ymodem mode)", "[ off ] [ baud ]/n" "    - l

2011-03-23 09:24:00 2546

原创 u-boot-2011.03在TQ2440上的移植(9)--TFTP下载菜单制作

1、在common文件夹下添加tftp_menu.c, 内容如下:#include #include static char awaitkey(unsigned long delay, int* error_p){ int i; char c; if (delay == -1)  {  while (1)   {   if (tstc()) /* we got a key press */   return getc();  } } else  {          for (i = 0; i   {  

2011-03-23 09:22:00 2169

原创 u-boot-2011.03在TQ2440上的移植(8)--支持下载yaffs2文件系统

<br />参考文章http://blog.chinaunix.net/u3/101649/showart.php?id=2134240,第2步修改分区大小后经过测试可以在TQ2440上使用,TQ2440分区如下:<br />0~0x40000 u-boot (256K)<br />0x200000~0x500000 kernel  (3M)<br />0x500000~~ (剩余的)<br />1、通常一个Nnad Flash存储设备由若干块组成,1个块由若干页组成。一般128MB以下容量的Nand Fl

2011-03-21 15:11:00 2877

原创 u-boot-2011.03在TQ2440上的移植(7)--机器码配对

1、在u-boot和kernel中都会有一个机器码(即:MACH_TYPE),只有这两个机器码一致时才能引导内核。2、uboot机器码路径:arch/arm/include/asm/mach-types.h第375行#define MACH_TYPE_S3C2440      362板子初始化时指定的MACH-TYPE路径board/samsung/smdk2440/smdk2440.c第126行  /* arch number of SMDK2440-Board */gd->bd->bi_arch_num

2011-03-21 15:10:00 2776

原创 u-boot-2011.03在TQ2440上的移植(6)--支持dm9000x网卡

移植过程基本同http://blog.chinaunix.net/u3/101649/showart_2126764.html,稍作修改1、u-boot-2010.06默认的网卡是CS8900,所以要先把它屏蔽掉vi include/configs/smdk2440.h/*#define CONFIG_NET_MULTI#define CONFIG_CS8900  /* we have a CS8900 on-board */#define CONFIG_CS8900_BASE 0x19000300#def

2011-03-21 15:08:00 3690

原创 u-boot-2011.03在TQ2440上的移植(4)--支持nandflash启动

1、由原理图知接TQ2440的nanflash型号是K9F2G08U0A,2KB页面大页结构,256M。16位数据格式,接2440如下图所示:2、在include/configs/smdk2440.h头文件中定义Nand要用到的宏和寄存器,如下:vi include/configs/smdk2440.h/* * Nand flash register and envionment variables  */#define CONFIG_S3C2440_NAND_BOOT  1#define NAND_CTL

2011-03-21 15:04:00 3980 3

原创 u-boot-2011.03在TQ2440上的移植(3)--支持norflash启动

1、修改命令提示符为自己的vi include/configs/smdk2440.h第118行修改为#define CONFIG_SYS_PROMPT   "[SMDK2440]#"  //将命令行前的名字改成[SMDK2440]2、通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认是从Nor Flash启动的。3、TQ2440的所用的Norflash为EN29LV160AB。接线同AM29LV160DB翻开此芯片的dat

2011-03-21 14:59:00 5432 2

原创 u-boot-2011.03在TQ2440上的移植(2)--初始化时钟

smdk2440的初始化设置1、u-boot主要的目录结构如下  2、启动流程图下图   由上图可知u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。3、在include/configs/smdk2440.h头文件中添加CONFIG_S3C2440宏vi include/configs/smdk2440.h 在第40行添加#define CONFIG_S3C2440 1

2011-03-21 11:44:00 3815

原创 u-boot-2011.03在TQ2440上的移植(1)--建立自己的demo板

参考文章黄刚博客http://www.cublog.cn/u3/101649/showart_2276917.htmltekkman博客http://www.cublog.cn/u1/34474/showart_2212066.html1、到ftp://ftp.denx.de/pub/u-boot/下载u-boot-2010.06.tar.bz22、解压 tar jxvf u-boot-2010.06.tar.bz23、进入uboot cd u-boot-2010.064、删减uboot进入/board,留

2011-03-21 11:31:00 4862 11

转载 S3C2440启动方式研究

<br />S3C2440启动方式研究<br />不管S3C2440的启动设备是什么,它都是从0x0000 0000地址开始执行程序的,所不同的是地址的映射不一样。基于S3C2440的嵌入式系统上电之后,需要首选选择启动设备,2440的启动方式选择是通过模式引脚OM1和OM0来配置的,如图1 所示为2440的启动方式选择说明:<br /> <br />图1 S3C2440启动方式说明<br />由上图可知,S3C2440支持两种启动模式:NAND和非NAND(这里是Nor Flash),具体采用的方式取决于

2011-03-19 11:35:00 2216

转载 arm B和BL指令浅析

<br />B或BL指令引起处理器转移到“子程序名”处开始执行。两者的不同之处在于BL指令在转移到子<br />程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器)。由于BL指令保存了下条指令的地<br />址,因此使用指令“MOV PC ,LR”即可实现子程序的返回。而B指令则无法实现子程序的返回,只能实<br />现单纯的跳转。用户在编程的时候,可根据具体应用选用合适的子程序调用语句。<br />   AREA Init,CODE,READONLY  <br />;该伪指令定义了一个代码段

2011-03-19 11:00:00 35158 2

原创 深度分析NandFlash—物理结构及地址传送(以TQ2440开发板上的K9F2G08U0A为例)

        K9F2G08U0A是三星公司生产的总容量为256M的NandFlash,常用于手持设备等消费电子产品。还是那句话,搞底层就得会看datasheet,我们就从它的datasheet看起。        这就是 K9F2G08U0A的内部结构,具体的各个部件的介绍,就不详细介绍了,想了解的话可以参考伟东山的《嵌入式linux应用开发完全手册》。      现在就看一下重点的,NandFlash的存储单元的组织结构,K9F2G08U0A的存储单元的组织结构如下:结合上面的图,我们现在来分析一下:

2011-03-18 15:17:00 6331 4

原创 pc、ssh与vmware中的linux互通解决方案

<br />          妈的,我在我自己的电脑上的vmware中装个了RedHat,可不知道怎么我的xp与RedHat死活就是通不了,搞了两个多星期,一下班回来就不停地配ip,可就是不通,好不容易通了一下,可我的ssh又不知道怎么总连不上,这几吧破网络问题搞得我头疼死了,今天不知道怎么人品爆发了一回,一搞竟然通了。哈哈。。 赶紧记下来,免得以后又麻烦。<br />      网络情况:pc机是用电信的网上网,不需要IP<br />                    RedHat是装在vmware

2011-03-17 21:32:00 1209

原创 四步到位正确安装arm-linux 交叉编译器

<br />     今天花了点时间在RedHat5.0上安装了一个arm-linux交叉编译器。装的过程中出现过几个问题,经过查询网上的资料。现在就总结一下正确的安装方法。<br />    首先我用的是天嵌自带的交叉编译器EABI-4.3.3_EmbedSky_20100610.tar.bz2,<br />  1.首先建一个存放交叉编译器的目录,我建的目录的绝对路径是:/opt/TQ  (TQ就是我建的目录)<br />  2.解压EABI-4.3.3_EmbedSky_20100610.tar.bz2

2011-03-17 17:32:00 2234 1

转载 nand flash 总结

<br />NAND Flash产品可以分为三大架构,分别是Single Level Cell;SLC,包括三星电子、Hynix、Micron以及东芝都是此技术使用者,第二种则是Multi Level Cell;MLC,目前有东芝、Renesas使用,不过三星电子将在2005第四季推出相关产品,最后则是Infineon与Saifun Semiconductors合资利用NROM技术所共同开发的Multi Bit Cell;MBC。 <br />MLC是Intel在1997年9月最先开发成功的,其作用是将两个

2011-03-09 13:43:00 1290

空空如也

空空如也

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

TA关注的人

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