自定义博客皮肤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)
  • 资源 (10)
  • 收藏
  • 关注

原创 嵌入式学习笔记202-Linux kernel跑起来

在《嵌入式学习笔记104-uboot_1.1.6移植(4)》、《嵌入式学习笔记300-linux根文件系统搭建》uboot和根文件系统都准备好的前提下,此时的kernel已基本可以跑起来,不过还差正确的挂起文件系统,其中uboot传给kernel的挂载处是root=/dev/mtdblock2 ,而在《嵌入式学习笔记201-Linux kernel动起来》的打印分区信息是:mtd: partiti

2015-05-24 14:59:45 1326

原创 嵌入式学习笔记300-linux根文件系统搭建

制作根文件系统首先需要用busybox编译出系统文件所需的应用程序,然后再以此拓展构建根文件系统。 这里使用busybox1.16.0,可以在本博客查询看是否有上传。 tar jxvf busybox-1.16.0.tar.bz2 -C your_path配置:进入busybox-1.16.0 修改makefile,将164行的CROSS_COMPILE=/xx/xx/4.3.3/bin/a

2015-05-24 14:26:52 1030

原创 嵌入式学习笔记104-uboot_1.1.6移植(4)

前面的4篇uboot博文基本概括了uboot的整体flow,现在使能支持启动linux,至此之前请先阅读《嵌入式学习笔记200-Linux kernel初体验》和《嵌入式学习笔记201-Linux kernel动起来》。准备kernel的镜像文件才可以立马检测uboot是否能够启动kernel。在u-boot-1.1.6\include\configs\tq2440.h 最后添加如下几行code:

2015-05-24 11:56:23 884

原创 嵌入式学习笔记201-Linux kernel动起来

在前篇博文《嵌入式学习笔记200-Linux kernel初体验》在已经确保环境编译是ok的,接下来让kernel能够最基本的动起来,起码可以看到基本的启动打印!修改外部输入时钟频率, 修改 linux-2.6.30.4\arch\arm\mach-s3c2440\mach-smdk2440.c 在大概163行将16934400改成12000000。static void __init smdk

2015-05-24 11:35:36 1215

原创 嵌入式学习笔记200-Linux kernel初体验

本实验采用linux-2.6.30.4 version测试,交叉编译为4.3.3,相关源码可以自行下载或到本博客查看是否有,在自己环境下尝试编译kernel通过确保环境ok为后续的移植做好准备。对下载的linux-2.6.30.4.tar.bz2进行解压到自己指定位置 tar jxvf linux-2.6.30.4.tar.bz2 -C your_path修改编译工具及架构: 进入kernel根

2015-05-24 10:09:14 1058

原创 嵌入式学习笔记103-uboot_1.1.6移植(3)

经过之前对uboot的整体flow分析,现在开始针对2440移植,需要注意的是移植的code可能包含支持部分的2410code 不过并没有在s3c2410板子实测过。 主要概括:第一阶段的汇编code尽量短小,能用C实现的就用C,由于2440的board和头文件是从2410 copy过来的 里面会有很多信息或者宏关于2410,并且很多.c文件的头文件由于include的是2410,所以新增的一些关

2015-05-17 12:19:02 1540

原创 嵌入式学习笔记102-uboot_1.1.6移植(2)

接下来分析uboot的第二阶段,在第一阶段的start.S的末尾有: ldr pc, _start_armboot_start_armboot: .word start_armboot而start_armboot()就是第二阶段的入口,首先我们要认识两个重要的结构体,start_armboot()函数的一系列初始化可以说都是以这个结构体为主线的:typedef struct global

2015-05-11 22:49:38 1054

原创 嵌入式学习笔记101-uboot_1.1.6移植(1)

根据前篇博文(嵌入式学习笔记100-uboot1.1.6初体验)最后的结论,现在开始将其实现: a. 修改makefile的CROSS_COMPILE指定编译器 arm-linux-gcc -v –> gcc version 3.4.5CROSS_COMPILE = /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/

2015-05-05 22:23:49 860

原创 嵌入式学习笔记100-uboot1.1.6初体验

到官网或其他网上下载u-boot-1.1.6.tar.bz2解压包到相应目录:tar -jxvf u-boot-1.1.6.tar.bz2 -C ../xxxxxx , 我是解压到samba共享的目录上以便到时候用sourceinsight建立工程。解压好后先 make distclean or make mrproper 确保源码干净setup project via sourceinsig

2015-05-04 18:54:09 985

原创 嵌入式学习笔记008-裸奔篇之串口

串口是个好东西,前几篇裸奔程序由于没有串口,自己调试都是有led等来表示的,比较“苦逼”,终于可以用串口了~~~,这里主要采用上一篇博文(嵌入式学习笔记007-裸奔篇之定时器),也就是串口也是用中断实现的,而且也只是在前一篇博文增加串口的初始化uart0_init(),以及在中断处理函数增加对串口的处理。只要稍微改造前一篇博文就是一个通用的中断处理程序!这里主要实现在串口输入一个字符,接受后+2再

2015-04-28 21:54:45 1021

原创 嵌入式学习笔记007-裸奔篇之定时器

s3c2440的定时器比较简单,这里主要借鉴韦东山老是的code加以改造一下,一个是对head.S的flow改善,另一个是设置FCLK=400MHZ,比例为1:4:8,试过将SDRAM的HCLK=200MHZ,发现不work,查看我的SDRAM是HY57V561620FLT-H clock = 133MHZ,故设置为100MHZ。基本上看code及注释应该了解了,就不过多解释了,共有7个文件,如下

2015-04-26 22:03:43 1036

原创 嵌入式学习笔记006-裸奔篇之中断

在讲解中断时有必要理清一些关系: 中断和异常 1.中断: a.可屏蔽中断(maskable): I/O设备发出的中断请求(irq)都属于.可处于两种状态:屏蔽的/非屏蔽的. b非屏蔽中断(nonmaskable): 只有几个危急事件才引起.总是由CPU辨认. 2.异常: a.处理器探测异常:当CPU执行指令时探测到一个反常条件所产生的异常. 根据保存在eip寄存器中

2015-04-26 18:17:57 1562

原创 嵌入式学习笔记005-裸奔篇之flash

flash是用来存储程序的,类似PC机的硬盘,U盘之类的,即使断电数据也不会丢失,与之对应的就是SRAM/SDRAM,而目前嵌入式用的flash主要有nor flash和nand flash两类,nor flash接口可以直接与处理器的地址线相连直接访问,像访问SDRAM那样,所以如果考虑成本的话可以让程序直接上电后从nor flash启动,不过现在追求更快的运行速度,所以都是极小部分运行后将其余所

2015-04-19 23:10:58 1018

原创 嵌入式学习笔记004-裸奔篇之SDRAM

前提:针对S3C2440来说,一个地址对应一个字节!以下是SDRAM物理存储map,同样的地址,但对应的数据data也即位宽8bit、32bit作为分析 这里要解释一个地址连接很多新手的疑惑,就是连接8bitSDRAM是: CPU_ADDR0 –> SDRAM_ADDR0 CPU_ADDR1 –> SDRAM_ADDR1 CPU_ADDR2 –> SDRAM_ADDR

2015-04-19 10:42:40 1426

原创 嵌入式学习笔记003-裸奔篇之按键

有了前面关于led的讲解后,后续的相关裸奔就方便多了,当然,code就不会像led那样简单了~ 现在开始讲解关于按键key的相关code首先先看原理图找到key相关的引脚,在我的tq2440板子中,有如下分布: key1 – INT1 – GPF1 key2 – INT4 – GPF4 key3 – INT2 – GPF2 key4 – INT0 – GPF0 从上面可以看出GPF012

2015-04-16 21:46:25 994

原创 嵌入式学习笔记002-裸奔篇之点亮led

正如编写第一个程序所打印“hello world”那样,对TQ2440开发板的初次使用也是从最简单的部分入手,点亮led灯无疑是最简单的,起码只要设置几个寄存器就好,比起打印容易得多了,后续会讲到串口部分再来实现我们这句金典的对白~~~~板子共有4个led灯,如果能够成功点亮其中一个,那么其他几个将不是问题,故而我们的目标是先点亮第一个先,在此我们必须理清几个问题: a. led的引脚连接的相关

2015-04-15 23:29:21 1341

原创 嵌入式学习笔记001-序言

开发环境: Win7(64bit) + VBox(Ubuntu12.04)开发板    : TQ2440写该系列笔记即是给自己学习linux旅程所留下的痕迹,同时也方便其他刚步入嵌入式大门的同道中人以供参考,若我的博文能够使你有所收获,将是我的荣幸~~~

2015-04-13 21:07:00 736

原创 关于printf()参数问题

2014-03-07 13:12:18 1702

原创 CPU,MPU,MCU,SOC,SOPC联系与差别

最近选了SOPC这门课程,突然发现很有兴趣,就乘胜追击多捣鼓一下,不过最初还是先解决CPU,MPU,MCU,SOC,SOPC以上这几个概念吧。1.CPU(Central Processing Unit),是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Dec

2013-10-08 21:30:27 3742

转载 FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法

FLASH连接CPU时,根据不同的数据宽度,比如16位的NOR FLASH (A0-A19),处理器的地址线要(A1-A20)左移偏1位。为什么要偏1位? 从软件和CPU的角度而言,一个地址对应一个字节,就是8位数据。这是肯定的,不要怀疑这点。 对于具体器件而言,它的位宽是一定的,所谓位宽,指的是"读/写操作时,最小的数据单元" -- 别说最小单元是"位",一般设备上没有单独的"位操作",

2013-08-05 16:52:46 1005

转载 uboot启动内核

假设bootcmd = nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0 nand read.jffs2 0x30007FC0 kernelnand read.jffs2 0x30007FC0 kernel;从nand读出内核:从哪里读?   从kernel分区        放到哪里去?-0x30007FC0下面讲解什

2013-07-15 12:56:14 786

原创 Uboot的启动流程

注:针对S3C2440的uboot 具体参考天嵌的tq2440在tq2440中有两种启动方式,分别为nor flash和 nand flash。现在就简单的讲一下他们的启动流程以及一些初学者的常见疑问。从nor flash启动:nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是原来的0x40000000)

2013-07-13 21:07:01 831

原创 QT4.5文件系统的制作

注:本实验在天嵌的tq2440下的      在你的文件系统的”opt/”目录下新建一个名为”qt-4.5/”的目录.然后复制Linux上的”/opt/EmbedSky/qt-4.5/_install/arm/”目录下的”lib/”目录到前面建立的”qt-4.5/”目录下,然后进入到刚刚复制过来的”lib/”目录下,删掉除去”fonts/”目录和”*.so*”文件外的其他文件,然后

2013-07-12 22:16:21 1279

原创 Ubuntu下安装QT

在学习QT这块知识时,你必须具备的条件是:  1)如果你之前自己移植了U-BOOT,内核,根文件系统,你的内核必须具备的最基本功能是串口驱动,LCD驱动,触摸屏驱动,网卡驱动,最好把NFS文件系统也弄上;你现在的根文件系统可能也是最简单的,接下来你还要在文件系统中添加QT4的相关配置,关于这个文件系统的QT4配置,我将在最后面的附录中添加上.  2)如果你没有移植完U-BOOT,内核,根文

2013-07-12 22:10:32 961

原创 在tq2440板看到U盘汉字乱码问题

按照天嵌提供的文档  《天嵌科技出品-Linux移植之Step By Step_V4.5_20100605》及《移植u-boot-1.1.6到TQ2440文档》将编好的uboot 内核 文件系统烧入板子 在一切正常启动后,插入U盘,出现如下提示:[root@EmbedSky /]# usb 1-1: new full speed USB device using s3c2410-ohci an

2013-07-12 21:30:11 1385

原创 关于QT的一些概念

之前学过QT,只是简单的学学,开始时在Windows下练习的,最后是在天嵌S3C2440里跑的,不过天嵌给的软件是Qtopia 当时没理这有什么区别,反正在师兄的帮助下,成功的将QT4.7安装到ubantu上并且成功运行到arm板上了,现在重新看看QT,发现有必要了解一下这些概念,到时再发一些关于qt安装的步骤。         QT是一个C++类库,是跨平台的。只要在相应的平台加入相应的库进

2013-07-06 15:36:20 813

转载 结构体的内存对齐

结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。结构体内部成员的对齐要求,结构体本身的对齐要求。最重要的有三点(一)成员对齐。对于结构体内部成员,通常会有这样的规定:各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。但是也可以看到,有时候某些字段如果严格按照大小紧密排列,根本无法达到这样的目的,因此有时候必须进行padding。各成员

2013-06-30 17:41:53 670

原创 与零值比较

当通过用if(值  0)进行比较的时候 ,要看这个值是什么类型的   具体如下:1. 当值为 int, char型的时候   应用 if(int_val == 0)或者 if(int_val != 0)  2. 当值为指针变量的时候   应用if(NULL == p)或者if(NULL != p)    注:NULL最好写在左边  因为如果在右边的话容易写成 p=NULL 编译不会错 但在

2013-06-28 21:20:05 727

原创 定义与声明的区别

所谓的定义是指编译器创建了一个对象并为这个对象开辟一块内存,是从无到有的过程,而声明只是告诉编译器有这个东西存在了,这个变量名或者函数名已经被预定了,举个例子 :   1.void test(int a)  {      .............    ................          }    2.  void test(int);第一

2013-06-28 19:36:52 630

原创 编译与链接

当我们编写好源文件后(.c)经过编译器生成目标文件(.obj) 最后通过链接器将编好的目标代码同启动代码,库代码一起再生成一可执行文件(.exe) 所谓的启动代码是程序与操作系统之间的接口,库代码就是你的源程序里所include的那些库函数(如printf)

2013-06-28 16:47:40 627

转载 数组指针和指针数组的区别

数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元

2013-06-28 09:55:48 714

原创 学习笔记_C语言

1.    for( ; 1 ; ) 等价于 while(1)2.    程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。3.   局部变量能否和全局变量重名?     能,局部会屏蔽全局。要用全局变量,需要使用"::"4.   对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?               c用

2013-06-27 18:45:06 703

转载 C语言中的typedef

Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。#define dPS struct s *typedef struct s * tPS;以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?答案是:typedef更好dPS p1,p2;tPS p3,p4;第一个扩展为

2013-06-26 16:07:15 1082

转载 C语言中的volatile

推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人;下面的函数被用来计算某个整数的平方,它能实现预期设计目标吗?如果不能,试回答存在什

2013-06-26 15:29:55 643

转载 C中的const

1、什么是const?   常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2、为什么引入const?   const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用?   (1)可以定义const常量,具有不可变性。   例如:const int

2013-06-25 23:07:58 656

原创 预处理器标识#error的目的是什么?

由于是第一次用博客,先试一试.....................回到原问题 预处理器标识#error的目的是什么?编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。下面举个例子:程序中往往有很多的预处理指令#ifdef XXX.........#else...

2013-06-24 21:13:23 2660

u-boot-1.1.6(config_for_tq2440)

针对tq2440配置的uboot1.1.6

2015-05-17

圈圈教你玩USB

圈圈教你玩USB,USB入门基础比较适合.

2013-10-13

周力功写给学单片机的年轻人

周力功写给学单片机的年轻人,挺有感触的。

2013-10-09

开关电源原理与设计-经典

开关电源原理与设计-经典,里面有各种类的原理图及元器件的参数计算

2013-08-23

How to Write makefile

How to Write makefile

2013-07-15

空空如也

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

TA关注的人

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