自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 s3c2440核心板启动时出现Failed to execute /linuxrc. Attempting defaults..

最近买了一批s3c2440的核心板,nandflash 256M是三星的K9F2G,内存64M,nor flash为spansion S29AL016D。收到核心板后发现卖家在里面烧入的boot为vboot,不是uboot,不满足我的应用,因此第一件事情就是重新烧写uboot。1、在烧写uboot遇到第一个问题就是Jflash不能识别nor flash芯片,我最初用的是JFla...

2019-03-31 11:11:09 976

原创 ARM920T的MMU与Cache

ARM920T的MMU与Cache目录 虚拟地址和物理地址的概念 虚拟内存管理 ARM920T的CP15协处理器 MMU Cache 操作MMU和Cache的内核启动代码 参考资料 索引虚拟地址和物理地址的概念 CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果C...

2019-03-26 17:04:45 441

原创 ARM汇编伪指令介绍

在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪...

2019-03-26 17:03:00 5052

原创 LPC1114启动代码分析

启动代码是芯片复位后进入C语言的main()函数前执行的一段代码,主要为运行C语言程序提供基本运行环境。启动代码作用一般是:1)堆和栈的初始化;2)向量表定义;3)地址重映射及中断向量表的转移;4)设置系统时钟频率;5)中断寄存器的初始化;6)进入C应用程序。 启动代码文件:startup.s,startup.s包含异常向量表和系统初始化代码,保存C语言使用的堆和栈的开始位置...

2019-03-26 17:01:20 1163

原创 关于PIC单片机SLEEP指令

之前一直没有真正理解sleep指令,最近在做智能水表的产品的时候,用了一款8位的单片机PIC16F690,当看到程序中的sleep指令时以为执行后cpu还会工作,导致一些认识上的错误,在网上搜索了一下,找到了一篇关于sleep的详细说明文章,现收集下来以便以后查询!在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将...

2019-03-26 16:58:26 3042

原创 HEX文件和BIN文件的区别及HEX的代码转换

HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别:1 -HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身。在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。2 -BIN文件格式对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制...

2019-03-26 16:57:19 5192 1

原创 ARM汇编伪指令介绍

在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,是汇编程序所提供的帮助汇编器进行汇编的指令,并非单片机指令的一部分,因此伪指令不占用存储空间,它只是协助程序的汇编工作。这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命...

2019-03-26 16:55:33 2122

原创 时钟周期、机器周期、指令周期的概念及三者之间的关系;定时器及计数器

时钟周期时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲...

2019-03-26 16:54:15 63200 11

原创 ARM 学习笔记整理(一)

ARM 学习笔记整理,主要用于将来的研究开发参考。一、ARM体系结构的版本 处理器的体系结构就是其使用的指令集,而通常我们说的Soc结构的处理器可以理解为一个实现机器指令集的硬件内核,在这个内核周围集成各种功能模块,比如:图像处理、通信处理等模块,然后将这些全部封装在一起,并将各个功能模块和内核通过引脚从芯片封装中引出来供人们使用。我的理解是Soc结构基本上是内核+通信+人机...

2019-03-26 16:52:11 7649 7

原创 ARM 学习笔记整理(二)

六、中断体系结构 上图为S3C2440 ARM处理的框图,从上图我们可以看到ARM920T是实现ARMv4T指令集的内核,而下面的功能模块是各个厂家基于这个内核设计的,各个功能模块的寄存器通过地址映射到ARM920T的地址空间中(比如我们在芯片手册中看到的各种控制器的寄存器地址),并通过AMBA总线和内核模块进行通信,比如中断控制器,nand flash控制器等。这个框图为...

2019-03-26 16:48:26 545

原创 ARM 学习笔记整理(三)

七、S3C2410/S3C2440时钟体系结构通过对S3C2440时间体系结构的学习,我们可以知道在一个ARM CPU中存在多种时钟源,这些时钟源根据各个模块对时钟的要求分别用于内核、高速设置、低速设备、独立的USB设备等,而这些时钟源的产生可以通过外部晶振在内部PLL电路、预分频电路、分频电路的作用下产生。同时从上电到得到稳定的时钟是需要一个过程的,如上图...

2019-03-26 16:46:18 538 2

原创 ARM学习笔记整理(四)-移植U-Boot(一)

移植U-Boot顶层Makefile的主要任务就是组织整个u-boot工程的编译,概括可以分为一下几个步骤:1、首先通过执行make *_config传入$(@:_config=), ARCH, CPU, BOARD, VENDOR, SOC参数(一共六个参数但不一定同时存在),给mkconfig。2、mkconfig接...

2019-03-21 17:12:13 541

原创 ARM学习笔记整理(五)

最近在使用ADS1.2调试S3C2440的时候遇到下面的问题:1、在启动AXD后遇到 DBT Warning 00049: Image probably in wrong byte sex 这样的错误,经过多次试验,发现时JLink没有配置好的原因:CPU的Endian应该配置为Little endian,如下:经过这样的配置后关闭AXD,再重新打开AXD后在加载完imag...

2019-03-21 17:10:31 464

原创 ARM学习笔记整理(四)-移植U-Boot(二)

正常编译uboot的过程是,在make XXXX_config配置你的成你的板子之后,直接去make,就可以去编译出最后你需要的u-boot.bin了。此处,就是分析,在make之后,最后boot是如何生成的,去分析这个过程。$(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)UNDEF_SYM=`$(OBJ...

2019-03-21 17:08:38 487

原创 JTAG各类接口针脚定义及含义

TAG各类接口针脚定义及含义JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。一、引脚定义Test Clock Input (TCK) -----强制要求1TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟...

2019-03-21 17:06:20 46840

原创 linux1.0内核代码学习(一)

库文件和头文件 在程序中,使用#include <stdio.h>类似的头文件stdio.h在编译器的头文件路径中,#include "abc.h"中的abc.h文件则应该在当前目录。通过对编译器指定参数-I<PATH>来指定头文件所在目录,可以用 #include <>来引用。例如:gcc -I./include hello.c,将从当前目录下的in...

2019-03-21 17:01:50 6360

原创 linux1.0内核代码学习(二)

这节主要是对Makefile进行详细注解:VERSION = 1 ##版本号PATCHLEVEL = 0 #补丁号ALPHA =all: Version zImage#all标示创建Makefile所知的最顶层的目标。这里就是Version和zImage。zImage就是引导启动盘映像文件,#若将其写入软盘就可以使用该软盘引导linux系统了。...

2019-03-21 17:00:14 848

原创 linux1.0内核代码学习(三) 之linu1.0内核运行

通过Makefile中的命令make zdisk可以制作从磁盘启动的linux1.0映像文件,由于linux1.0开发的时候当时的gun工具版本比较低,当时生成的可执行文件时a.out格式的,但现在的gun工具编译出来的可执行文件都是elf格式的,比如我的gcc版本是4.3.2的,而linux1.0的tools工具在生成可执行文件的过程中都是按照a.out格式来制作的,我曾经尝试用gcc编译a.o...

2019-03-21 16:58:18 1093

原创 linux1.0内核代码学习(四) 之在zboot中符号表的应用

linux1.0以上的内核是压缩过的,在启动的过程中会调用zboot/misc.c中的decompress_kernel函数解压缩,在解压缩的过程中需要得到压缩文件tools/zSystem的文件长度input_len,这是一个外部引用的变量,这个变量的值在哪里定义的,这就需要用到符号表了,是通过zBoot/piggyback.c文件中定义了input_len的符号表,并对这个变量赋值,然后再将这...

2019-03-21 16:55:48 470

原创 linux1.0内核代码学习(五) 之保护模式编程

linux1.0内核是压缩的zImage映像文件,其内部格式组织如下:其启动各个阶段在内存中的位置如下:下图是指zboot/zSystem中程序调用自带的解压缩程序,将tools/zSystem解压到0x100000的内存地址处,并跳转到0x100000处执行boot/head.s程序。这个阶段已经处于32位保护模式运行,使用的gdt、idt表是setup程序中设置的临时表...

2019-03-21 16:50:33 382

原创 linux1.0内核代码学习(六) 之内核从软盘引导,从硬盘加载根文件系统

linux1.0内核代码学习(六) 之内核从软盘引导,从硬盘加载根文件系统 环境配置如下:(在这之前用过linux0.98、1.0、1.13、1.2.13、2.0.4内核,尝试过用gcc2.2.2、gcc2.4.5、gcc2.6.3、gcc2.95.3进行编译调试都没有完全成功过,不过积累了很多经验)编译环境readhat9.0wmware虚拟机+gcc version 3.2.2内...

2019-03-21 16:46:38 595

原创 inux1.0内核代码学习(七) 之GRUB的编译、安装,制作GRUB启动盘,通过GRUB从硬盘启动内核、加载文件系统

先描述一个问题,制作好可以grub引导的硬盘,在虚拟机中启动时出现下面的错误:解决方法是修改myinitrd4M.img中的文件系统,/etc/inittab文件的内容如下:将tty2::askfirst:-/bin/sh修改为console::askfirst:-/bin/sh,解释原因如下:1)文件系统中/etc/inittab文件的作用:我们知道在Linux的内核被载入之...

2019-03-13 17:10:03 1774 2

空空如也

空空如也

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

TA关注的人

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