目标: 1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash) 5.执行main (进入第二阶段) 6.写 7.制作uboot.lds链接脚本 编写步骤: 1.创建个名为"my_bootloader"根目录,方便编写uboot 2.新建my_bootloader/si目录,创建source insight工程 2.1 新建my_bootloader/st…
目标: 1   添加头文件setup.h和serial.h 2   写main函数   2.1 帮内核设置串口0, (内核启动会打印出启动信息) 2.2把内核读入到SDRAM 2.3设置参数(参考u-boot-1.1.6 /lib_arm/armlinux.C中do_bootm_linux()函数) 2.4跳转运行内核(参考u-boot-1.1.6/lib_arm/armlinux.C中do_bootm_linux()函数) 3 写tag参数函数 3.1 setup_start_tag (voi…
编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html) 3.通过make生成的反汇编来查看代码是否正确 4.通过oflash烧写到板子nand flash上 5.查看串口是否数据打印  发现串口无数据,发现两处错误: 5.1在init.C中define定义 没有加大括号,没有定义volatile型 例如: #define…
start_armboot()分析:在start.S初始化后跳转到start_armboot实现第2阶段硬件相关的初始化(烧写擦除flash,网卡驱动,usb驱动,串口驱动,从FLASH读内核,启动内核等)然后调用main_loop();实现u-boot环境参数设置(print),读内核,启动内核等 start_armboot函数代码如下(位于u-boot-1.1.6/lib_arm/borad.c) void start_armboot (void) { ... for (init_fnc_p…
分析uboot第一个执行函数_start(cpu/arm920t/start.S) 打开cpu/arm920t/start.S .globl _start // .globl定义一个全局符号"_start",表明_start这个符号要被链接器用到 _start: //_start:系统复位设置,以下共8种不同的异常处理 b reset //复位异常 0x0 ldr pc, _undefined_instruction                 //未定义的指令异常 0x4 ldr…
u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/   下面对nand flash的初始化代码nand_init()进行分析: 1.如果定义(CONFIG_COMMANDS & CFG_CMD_NAND)没定义(CFG_NAND_LEGACY) 则start_armboot()调用driver/nand/nand.c中的nand_init(),否则如…
2015.3.27星期五 晴 链接脚本定义代码的排放顺序 硬件系统初始化:一:arm核初始化:(里面有指令)初始化ARM核的时候需要看arm核的手册指令:1.异常向量(最起码有个复位异常,初始化模式-svc) ldr r0, =_start mcr p15, 0, r0, c12, c0, 0 2.处理器模式-SVC3.关闭中断 mrs r0, cpsr bic r0, r0, #0x1f orr r0, r0, #0xd3 @1101 0011 //关闭irq,fiq和设置SVC msr cp…
3. 串口初始化 4. 代码实现 关于串口 对于嵌入式设备的开发,刚开始好多设备都无法使用,由于无法获得程序的运行状态,调试程序需要花费好多时间和精力,因此串口对于嵌入式程序的调试的作用显而易见,当串口不能用时,可能只能用led的亮灭来略微指示程序的运行状态,有了串口后,就能获得更多的调试信息了.S3C6410的串口使用和其它设备都差不多,初始化配置串口后,就可以收发数据了.首先来看下芯片手册上的串口框图: 串口信号线有发送数据信号线TXDn,接受数据信号线RXDn,如上图,这两根信号线分别连到…
汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为伪操作. .globl _start 作用:声明一个_start全局符号(Symbol), 这个_start这个符号要被lds链接脚本用到 .balignl 16,0xdeadbeef 作用:以当前地址开始,在地址为16的倍数的指令位置的上一个指令填入为0xdeadbeef的内容. 实例,在start.o中有以下几段: 1 .globl _start // .globl定义一个全局符号"_start&…
第一次写技术博客,还有些兴奋呢.我是CrazyCatJack,大家可以叫我CCJ或者疯猫.我即将成为一名嵌入式Linux的驱动工程师,现在还是一枚大四狗,呼呼~大学期间做了一些项目和比赛,都是基于32位的MCU(例如STM32.Freescale K60),这些呢都是根据网上的视频,PDF自学的.现在想更进一步,学习一下嵌入式Linux.UCOS-II等嵌入式系统.因为给板子加系统是一个必然趋势,控制会越来越复杂,内容也越来越多的.有一个系统统筹管理是非常棒的选择.好了,废话少说,今天开始我的第…