3、u-boot
aoXiaMi
在读学生
展开
-
.balignl 16,0xdeadbeef
.balign 意思是:以当前地址为开始,找到第一次出现的以第一个参数为整数倍的地址,并将其作为结束地址,在这个结束地址前面存储一个字节长度的数据,存储内容正是第二个参数。如果当前地址正好是第一个参数的倍数,则没有数据被写入到内存。 例如: .balign 8, 0xde 这条指令的含义可以用下图表示: 图解:以当前地址为开始,找到第一次出现的以8为整数倍的地址,并将其作为结束地址,在转载 2016-04-20 10:35:11 · 775 阅读 · 0 评论 -
u-boot-2016.05移植:(2)、修改时钟 初始化sdram 重定位u-boot 配置smdk2440.h 修改u-boot.lds
1、修改时钟: 在u-boot-2016.05\arch\arm\cpu\arm920t\start.S中将 /* * 设置时钟 */ /* FCLK:HCLK:PCLK = 1:2:4 */ /* default FCLK is 120 MHz ! */ ldr r0, =CLKDIVN mov r1, #3 str r1,原创 2016-08-15 11:56:32 · 2331 阅读 · 5 评论 -
u-boot-2016.05移植:(4)、支持NADN FLASH
1、在u-boot-2016.05\drivers\mtd\nand文件夹中拷贝一份s3c2410_nand.c并重命名s3c2440_nand.c。 那么如何决定将s3c2440_nand.c和s3c2410_nand.c哪个编译进程序? 首先在u-boot-2016.05\include\configs\smdk2440.h中将/* * NAND configuration */#if原创 2016-08-21 22:47:50 · 1348 阅读 · 0 评论 -
ERROR : arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
今天在u-boot的smdk2440.h文件中用单行注释双斜杠注释了一个宏定义,如下://#define CONFIG_CMD_NAND在编译的时候出现下面错误提示:arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expressionarm-linux-ld:u-boot.lds:1: syntax errorMakefi原创 2016-08-11 01:52:00 · 5664 阅读 · 1 评论 -
u-boot-2016.05移植:(5)、支持DM9000网卡
1、在u-boot-2016.05\include\configs\smdk2440.h中修改/* * Hardware drivers */#define CONFIG_CS8900 /* we have a CS8900 on-board */#define CONFIG_CS8900_BASE 0x19000300#define CONFIG_CS8900_BUS16原创 2016-08-22 14:25:08 · 1738 阅读 · 1 评论 -
u-boot-2016.05移植:(3)、识别NOR FLASH
在u-boot-2016.05\drivers\mtd\jedec_flash.c中的结构体数组jedec_table最末尾添加一项:static const struct amd_flash_info jedec_table[] = { ... { .mfr_id = (u16)MX_MANUFACT, .dev_id = 0x2249,原创 2016-08-20 10:23:04 · 1980 阅读 · 0 评论 -
u-boot-2016.05移植:(6)、修改默认参数
1、修改ip相关默认参数: 在u-boot-2016.05\include\configs\smdk2440.h中修改CONFIG_NETMASK、CONFIG_IPADDR、CONFIG_SERVERIP三个宏定义的值为:#define CONFIG_NETMASK 255.255.255.0#define CONFIG_IPADDR 202.204.53.5#defi原创 2016-08-24 00:17:14 · 1879 阅读 · 0 评论 -
u-boot-2016.05移植:(7)、使u-boot支持烧写文件系统
u-boot本身支持对jffs2格式文件系统的nand指令操作,但是没有支持yaffs2的格式,所以我们要修改使其支持yaffs2格式文件系统指令操作,在u-boot中搜索.yaffs,并找不到相关代码,所以我们转而搜索.jffs2 ,可以在u-boot-2016.05\cmd\nand.c:do_nand函数中发现相关代码,观察可发现u-boot关于nand的操作指令就是在u-boot-2016.原创 2016-08-24 21:59:20 · 1470 阅读 · 0 评论 -
u-boot-2016.5启动流程
开始从u-boot-2016.05\arch\arm\cpu\arm920t\start.S中reset执行 reset -> cpu_init_crit -> lowlevel_init -> _mainreset:...#ifndef CONFIG_SKIP_LOWLEVEL_INIT bl cpu_init_crit#endif bl _main...#ifndef C原创 2016-07-17 17:32:09 · 5935 阅读 · 0 评论 -
ERROR: Makefile:1385: recipe for target 'checkarmreloc' failed
在编译u-boot-2016.05时出现如下问题:解决办法: 搜索 “u-boot contains unexpected relocations”,没有搜索到任何内容,那么我们再尝试搜索checkarmreloc:lvxiaoliang@lvxiaoliang-virtual-machine:~/Ftp/tmp/u-boot-2016.05$ grep "checkarmreloc" * -nR原创 2016-08-09 17:17:49 · 2604 阅读 · 0 评论 -
Bootloader的Flash启动、sdram的内存分布
Flash启动方式通常有两种:一种是可以直接从Flash启动(针对NOR Flash而言);另一种可以将压缩的内存映像文件从Flash中读到RAM,再从RAM启动。 如果是从Flash中读到RAM,再从RAM启动,那Flash的存储如下: Bootloader一般放在Flash的低端或顶端,这是根据处理器的复位向量设置的,要使Bootloader的入口位于处理器上电执行第一条指令的位置。接原创 2016-05-30 18:17:10 · 3481 阅读 · 0 评论 -
/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info'
在毕业班第2课第3.2节_移植最新u-boot之修改代码支持NAND启动时编译出现错误:/home/lvxiaoliang/Ftp/u-boot-2012.04.01/fs/yaffs2/yaffscfg.c:210: undefined reference to `nand_info'make: *** [u-boot] Error 1直接屏蔽掉yaffs: include/configs/s原创 2016-06-20 22:04:32 · 1206 阅读 · 2 评论 -
可执行文件、代码段和数据段
通常ARM编译器生成的可执行文件由两部分数据组成,分别是代码段和数据段。代码段又分为可执行代码段(text)和只读数据段(rodata);数据段又分为初始化数据段(data)和未初始化数据段(bss)原创 2016-04-21 15:25:49 · 1870 阅读 · 0 评论 -
系统控制协处理器CP15
在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。访问CP15寄存器的指令MCR ARM寄存器到协处理器寄存器的数据传送 MRC 协处理器寄存器到ARM寄存器的数据传送 注意:MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。原创 2016-04-21 15:54:33 · 1107 阅读 · 0 评论 -
自己写bootloader之问题:链接时出现undefined reference to '__umodsi3'
按照毕业班课程之自己编写bootloader,因为用到了求余运算编译完成链接时出现错误提示:undefined reference to ‘__umodsi3’,揣测这是因为编译器版本太低不支持求余运算,需要其他库支持导致的,使用4.3.2版本的arm-linux-gcc后问题得以解决。 安装如何arm-linux-gcc参考博文:arm-linux-gcc的安装配置原创 2016-06-07 22:49:41 · 1290 阅读 · 0 评论 -
字对齐与半字对齐
ARM 处理器在对于“字”/ “半字”数据进行访问时,对数据的存储格式是有要求的,在存储器紧邻的两个字节单元,并且首字节地址必须能被2整除,这样存储的 16bit 数据称为 ‘半字对齐’存储数据,16bit 数据这样的存储方式称为 ‘半字对齐’存储。类似的,ARM 处理器在进“字”数据访问时,要求被访问的“字”必须存放在存储器紧邻的4 个字节单元,并且首字节地址必须能被4 整除,【按照二进制从低位数原创 2016-04-20 10:52:32 · 1382 阅读 · 0 评论 -
arm:PC=当前执行指令地址+8
AMR7的三级流水线如下: ARM9是五级流水线,ARM9的五级流水线如下: 可见,ARM9和ARM7中都是PC=当前执行指令地址+8的根本的原因是,两者的流水线设计中,指令的执行阶段都是处于流水线的第三级。转载 2016-04-22 13:53:03 · 4158 阅读 · 1 评论 -
学习笔记:u-boot引导内核启动
u-boot主要目的: 1. 从flash上读出内核写到SDRAM中 2. 启动内核(用do_bootm函数) 即 nand read.jffs2 0x30007FC0 kernel bootm 0x30007FC0 从nand上kernel这个地址区读写到0x30007FC0地址上去,然后从0x30007FC0上启动内核Flash上的内核是uImage=头部+真正的内核,头部原创 2016-04-11 22:32:28 · 1654 阅读 · 0 评论 -
u-boot-2016.05移植:(1)、建立新板并配置,使能正常编译通过
移植uboot-2016.5到JZ2440开发板(在smdk2410基础上修改): 1、修改顶层Makefile文件,添加:ARCH=armCROSS_COMPILE ?= arm-linux-2、在configs文件夹下拷贝smdk2410_defconfig重命名为smdk2440_defconfig,并将其中的2410替换为2440。 3、在arch/arm/Kconfig中添加:boo原创 2016-07-28 23:30:33 · 8717 阅读 · 2 评论