摘要:上一部分讲到 uboot 跳转到 start_armboot 处执行(中间插了一篇 异常中断处理)。 这次主要是记录 start_armboot 的实现。 文件为 /lib_arm/board.c 1、参数声明 1 void start_armboot (void) 2 { 3 init_fnc_t **init_fnc_ptr; //这里实际上是创建数组指针 //指向的数组为 start_armboot 之前的 init_sequence 数组 4 char *s; 5 #if defined(CONFIG_VFD) ||...
阅读全文
摘要:这篇是中断向量的存储、注释比较清晰、就不再细讲 1 /* 2 ************************************************************************* 3 * 4 * Interrupt handling 5 * 6 ************************************************************************* 7 */ 8 @ 9 @ IRQ stack frame. 10 @ 11 #define S_FRAME_SIZE 72 12 13...
阅读全文
摘要:直接切入主题 1、设置堆栈 1 skip_hw_init: 2 /* Set up the stack */ 3 stack_setup: 4 ldr r0, =CONFIG_SYS_UBOOT_BASE /* base of copy in DRAM */ //0x57e0_0000 5 sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* malloc area */ /...
阅读全文
摘要:在上一篇中讲完了lowlevel_init中对相应模式的设置、在最后对MMU进行了初始化。 那在这一篇就把使能MMU的过程描述了。 1、设置访问域 1 after_copy: //这里怎么就after了、我们可还没有copy呢 //剧透一下,后面会补充copy相关的代码,此处暂且跳过 2 #ifdef CONFIG_ENABLE_MMU // 3 enable_mmu: 4 /* enable domain access */ 5 ldr r5, =0x0000ffff 6 mcr ...
阅读全文
摘要:这一篇粗略讲一下lowlevel_init.S内部的模块。 1、_TEXT_BASE 1 #include <config.h> 2 #include <version.h> 3 4 #include <asm/arch/s3c6400.h> 5 6 #ifdef CONFIG_SERIAL1 7 #define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART0_OFFSET) 8 #elif defined(CONFIG_SERIAL2) 9 #define ELFIN_UART_CONSOLE_
阅读全文
摘要:虽然已经写了几篇关于uboot移植的、但是觉得整体对uboot的理解还是只停留在copy的层面。 狠下心来,从代码进行uboot的分析,并从新移植一次uboot。 这次更侧重于记录代码分析心得。 使用uboot的版本仍为2010.3版本。 这里有一个很是详尽的start.S分析网站,分析过程借鉴了网站的方法,但也有一些不同的地方http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analysis.html 总的不同有如下 在网站的分析中,基于代码为arm9...
阅读全文
摘要:修复文件/uboot/drivers/mtd/nand/nand_util.c文件如下代码段 /* output progress message only at whole percent * steps to reduce the number of messages printed * on (slow) serial consoles */ if (...
阅读全文
摘要:经过半周的制作,我的OK6410总算是成功在我自己构建的uboot上运行系统了。 在此回顾一下整个过程的大纲。 一、成功编译的开始 1、下载一份未经过处理的uboot 2、精简uboot中不用到的文件,保留相似的芯片6400的板级文件 3、对精简后的uboot进行初次编译,顺便可以检查工具链、uboot的完整性 4、通过创建目录、拷贝、修改的方式,创建出初始的6410的板级文件、Makefile等 5、对自己创建的6410进行初次编译,产生的错误一般是拷贝的文件内容未进行更改,修复后一般能正常编译 二、基本启动信息的修改 1、修改汇编入口代码/cpu/arm1176/st...
阅读全文
摘要:现在开始记录在linux上安装dnw功能 想要源代码,可以到这里forkhttps://github.com/Qunero/dnw4linux 详细的使用,README里面讲得很清楚了,不加赘述了。 这里只讲一下怎么使用。 1、加载模块.ko文件$ cd secbulk_driver/$ insmod secbulk.ko 然后确认一下已经加载$ lsmod | grep secbulk//若正确加载了,应该有回显secbulk 12728 0 2、插入USB to miniUSB线 然后查看一下系统信息$ dmesg//正常情况下应该有如下...
阅读全文
摘要:由于我电脑win7上的DNW-USB驱动一直装不上,所以选择在ubuntu下完成dnw的操作实现与uImage的引导。 先给开发板的uboot添加dnw功能 具体文件可以git这里https://github.com/plinx/uboot_dnw 1、将cmd_usbd.c拷贝到common目录下 2、添加规则到/common/Makefile# core command...COBJS-y += cmd_usbd.o 3、将usbd-otg-hs.h,usbd-otg-hs.c拷贝到u-boot/cpu/arm1176/s3c64xx/ 4、将regs.h,s3c64x...
阅读全文
摘要:一、网卡的正常化配置 1、修改头文件调用关系 在原配的smdk6400.h中(因为是复制过来的),网卡配置为CS8900,而手头开发板上的网卡为DM9000,所以第一步来修改网卡驱动程序。 修改/include/configs/smdk6410.h 找到如下字段,更改如下/* * Hardware drivers */#define CONFIG_NET_MULTI//#define CONFIG_CS8900 /* we have a CS8900 on-board *///#define CONFIG_CS8900_BASE ...
阅读全文
摘要:1、启动模块修改 进入/cpu/arm1176/目录,修改start.S文件 首先找到需要修改的CONFIG_NAND_SPL汇编原码,修改如下:#ifndef CONFIG_NAND_SPL/* * flush v4 I/D caches */mov r0, #0mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB *//* * disable MMU stuff and caches */mrc p15, 0, r0, c1, c0, 0bic r0, r...
阅读全文
摘要:参考连接:http://wenku.baidu.com/view/ae78a00390c69ec3d5bb75ce.html?st=1 链接上已经指明了我之前一直2013.01版本uboot产生错误的原因,2010.3版本到2010.6版本是uboot的一个分界,而2010.3版本的uboot是最接近samsung定制的s3c-u-boot-1.1.6版本uboot的一个版本号,所以在此选择版本2010.3 1、download the uboot from ftphttp://ftp.denx.de/pub/u-boot/download u-boot-2010.03.tar.bz2...
阅读全文
摘要:1、下载uboothttp://ftp.denx.de/pub/u-boot/ 2、解压文件tar xvf u-boot-latest.tar.bz2 3、进入uboot根目录、接着开始修改文件 4、创建板级文件目录cd /borad/samsungmkdir smdk6410 5、复制smdk6400文件到创建的文件目录cp smdk6400/* smdk6410/ 6、修改目录下的文件名cd smdk6410mv smdk6400.c smdk6410.cmv smdk6400_nand_spl.c smdk6410_nand_spl.c 7、修改板级文件内容vim smd...
阅读全文
摘要:由于学校的校园网服务器比较旧,开发板无法直接使用DHCP。 所以有两种解决思路: 1、在接入开发板之前,先接入一个交换机,接出来的接口再接开发板。 2、可能由于开发板内核版本旧导致的驱动版本比较旧(因为开发板OK6410买来的时候,配给的是3.01,而12.04版本的ubuntu的内核版本是3.2,在接入时,PC是可以适配这个校园网并获得ip),所以现在进行对开发板内核进行更新,目标版本3.6.3。 过程参考:http://blog.csdn.net/lwfbibi/article/details/7471877 步骤一:解压# tar xvf linux-3.6.3.tar.b...
阅读全文
摘要:1、minicom串口的传输 一般在linux下直接检测到U转串的驱动了,若为虚拟机,先装主机驱动,然后将usbserial分配给虚拟机即可,若主机为linux系统,接上即可自动安装驱动。$ lsmod | grep pl2303 或者 $ lsmod | grep usbserial 可以看到设备如下 安装minicom$ sudo apt-get install minicom$ sudo apt-get install lrzsz 配置minicom$ sudo mincom -s 首先设置serial port setup 通常情况下只用改第一个,改为ttyUSB0(通...
阅读全文
摘要:1、若是在win7下,先安装win7下的驱动再分配USB端口给虚拟机(略过) 2、不管是在虚拟机还是纯linux中,先下载minicomsudo apt-get install minicom 3、minicom中的设置lsmod | grep pl2303//首先查看pl2303驱动是否正确安装,在ubuntu下,接入接口则自动安装ls /dev | grep ttyUSB*//查看所使用的设备端口,在我电脑上显示为ttyUSB0//以下进入minicom设置sudo minicom -s//选择serial port setup,按下A,将端口改为ttyUSB0(按个人情况)//双...
阅读全文
摘要:linux内存管理的任务 1)组织规划整个系统的物理和虚拟存储空间分布; 2)为虚拟存储空间(线性地址空间)建立页表,即建立虚拟地址到物理地址的映射关系; 3)设置不同存数空间的访问控制属性,保护系统存储空间不被非法访问; 4)内存分配和释放。1 linux中的物理和虚拟存储空间的分布 支持MMU的32位微处理器上,linux物理存储空间和虚拟存储空间寻址范围都是0x0000_0000~0xFFFF_FFFF,为4GB。 但是linux运行在虚拟存储空间中,而实际使用中将远小于4GB的物理内存映射为虚拟内存的4GB。 物理存储空间分布(引用《嵌入式系统linux内核开发实战指南(...
阅读全文
摘要:linux内存管理 嵌入式处理器的分页管理为二级映射,内存空间与I/O空间统一编址,而x86处理器采用三级映射,内存空间与I/O空间独立编址。 在32位嵌入式系统中,存储空间的地址范围从0x0000_0000到0xFFFF_FFFF,内存和I/O共享从这4GB地址空间范围。 其主要包含以下几种存储空间: 1)设备空间(MT_DEVICE):二级分页 2)内部高速SRAM空间(MT_CACHECLEAN):一级分段 3)内部mini cache空间(MT_MINICLEAN):一级分段 4)低端中断向量(MT_LOW_VECTORS):两级分页 5)高端中断向量(MT_HIGH_...
阅读全文