![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
uboot
文章平均质量分 50
uboot
诺谦
热爱生活 活在当下
展开
-
6.移植uboot-支持yaffs烧写,打补丁
在上一章,裁剪uboot以及分区后,本章主要使uboot支持yaffs以及制作补丁1. 修改uboot支持yaffs首先,每个命令都会对应一个文件,比如nand命令对应的common/cmd_nand.c而我们使用nand命令时,便会进入do_nand()函数,位于common/cmd_nand.c1.1do_nand()函数代码如下所示:int do_nand(cmd_tbl_t...原创 2018-01-19 14:02:00 · 128 阅读 · 0 评论 -
5.移植uboot-设置默认环境变量,裁剪,并分区
在上一章使uboot支持网卡传输文件后,但是每次启机时,环境变量都要变为默认值,需要重新设置ip,MAC地址才行,由于没有配置mtdparts命令,启动内核也不成功所以本章主要学习:1)修改环境变量默认值2)裁剪uboot 3)分区,设置mtdparts命令1.修改之前,先来理解下uboot的环境参数首先,uboot会去校验(CRC)存放环境变量的一段空间 ,若CRC有效则使...原创 2018-01-17 14:26:00 · 312 阅读 · 0 评论 -
4.移植uboot-使uboot支持DM9000网卡
在上一章,使uboot能够支持nor、nand本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的dm9000x.h、dm9000x.c1.DM9000C介绍参考之前写的移植DM9000C驱动章节, 我们的DM9000是放在2440的bank4(0X20000000)的片选上面而DM900...原创 2018-01-17 09:33:00 · 165 阅读 · 0 评论 -
3.移植uboot-使板卡支持nor、nand
在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: 上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下所示(位于arch/arm/lib/board.c):/*第二阶段*/void board_init_r(gd_t *id, ulong dest_addr) ...原创 2018-01-08 18:00:00 · 132 阅读 · 0 评论 -
2.移植uboot-添加2440单板,并实现NOR、NAND启动
上章分析了uboot启动流程后,接下来便来配置新的单板,实现nor、nand启动1.首先在uboot里新建单板24401.1将2410的单板文件夹拷贝成2440:cd board/samsung/cp smdk2410 smdk2440 -rf //拷贝文件夹,然后将smdk2440下的smdk2410.c改为smdk2440.c,以及修改更改好...原创 2018-01-03 20:31:00 · 149 阅读 · 0 评论 -
1.移植uboot-分析uboot启动流程(详解)
本节总结:uboot启动流程如下:1)设置CPU为管理模式2)关看门狗3)关中断4)设置时钟频率 5)关mmu,初始化各个bank6)进入board_init_f()函数 (初始化定时器,GPIO,串口等,划分内存区域)7)重定位 复制uboot,然后修改SDRAM上的uboot链接地址)8)清bss9)跳转到board_init_r()函数,启动流程结束...原创 2017-12-28 16:29:00 · 320 阅读 · 0 评论 -
第4阶段——制作根文件系统 (4)
在上节制作busybox后(位于/work/nfs_root/mini_fs),然后根据以下5个来构建最小根文件系统:(1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误)/dev/null (表示空设备终端, 所有写到这个文件中的数据都会被丢弃掉。)(2)init进程的程序(也就是busybox,因为init程序位于busybox中,已经完成)(3)/e...原创 2017-08-21 19:44:00 · 193 阅读 · 0 评论 -
第4阶段——制作根文件系统之编译配置安装busybox(3)
在上一节分析出制作一个最小的根文件系统至少需要:(1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误)/dev/null (为空的话就是/dev/null, 所有写到这个文件中的数据都会被丢弃掉。)(2)init进程的程序(也就是busybox,因为init程序位于busybox中)(3)/etc/inittab(用于init进程读取配置, 然后执行init...原创 2017-08-21 19:26:00 · 101 阅读 · 0 评论 -
第4阶段——制作根文件系统之分析init进程(2)
本节目标:(1) 了解busybox(init进程和命令都放在busybox中)(2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情(3) 分析busybox中init进程 init_main()(3.1)熟悉init进程的inittab配置文件(位于/etc/inittab)(3.2)熟悉inittab配置文件中不同action的子进程区别(3.3)了解in...原创 2017-08-21 19:14:00 · 122 阅读 · 0 评论 -
第4阶段——制作根文件系统之分析init_post()如何启动第1个程序(1)
本章学习如何启动第一个应用程序1.在前面的分析中我们了解到,在init进程中内核挂接到根文件系统之后,会开始启动第一个应用程序:kernel_init函数代码如下:static int __init kernel_init(void * unused) //进入init进程 { prepare_nam...原创 2017-08-21 17:52:00 · 122 阅读 · 0 评论 -
第3阶段——内核启动分析之prepare_namespace()如何挂载根文件系统和mtd分区介绍(6)...
内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘、D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现最终目的运行应用程序?1.内核运行应用程序步骤:1.1首先是进入stext函数启动内核:ENTRY(stext): ... ... ...原创 2017-08-15 18:31:00 · 267 阅读 · 0 评论 -
第3阶段——内核启动分析之start_kernel初始化函数(5)
内核启动分析之start_kernel初始化函数(init/main.c)stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数真正理解需要对linux相关体系有很深的了解后才能明白代码如下:asmlinkage void __init start_kernel(void) { char * command_...原创 2017-08-15 18:28:00 · 183 阅读 · 0 评论 -
第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)
目标:(1)创建Source Insight 工程,方便后面分析如何启动内核的(2)分析uboot传递参数,链接脚本如何进入stext的(3)分析stext函数如何启动内核: (3.1) 关闭irq和fiq,设置svc管理模式 (3.2)判断是或支持这个CPU (3.3)判断是否支持这个单板(通过uboot传入的机器ID判断) (3.4)创建页表...原创 2017-08-15 18:25:00 · 306 阅读 · 0 评论 -
第3阶段——内核启动分析之make uImage编译内核(3)
目标:通过分析makefile,明白make uImage如何编译内核把整个内核的makefile分成三类(makefile资料文档在linux-2.6.22.6/Documentation/build/makefiles.txt)<1>各级子目录makefile(每个子目录都有makefile)<2>/arch/arm/Makefile(架构相关的makefile...原创 2017-08-12 00:48:00 · 168 阅读 · 0 评论 -
第3阶段——内核启动分析之make menuconfig内核配置(2)
目标:分析make menuconfig内核配置过程在上1小结中(内核编译试验)讲到了3种不同的配置:(1)通过make menuconfig 直接从头到尾配置.config文件(2) 通过make s3c2410_deconfig命令在默认的配置上进行自动修改.config文件(3)使用厂家提供的配置config_ok文件覆盖.config文件所以,所有的配置结果都是配置.con...原创 2017-08-11 23:50:00 · 150 阅读 · 0 评论 -
第3阶段——内核启动分析之内核编译试验(1)
目标:1.给内核打补丁2.配置3.编译4.重启 1 内核打补丁1.1通过FTP将Windows里system目录下linux-2.6.22.6.tar.bz2和linux-2.6.22.6_jz2440.patch文件拷贝到linux里/work/system下1.2 使用 tar xjf linux-2.6.22.6.tar.bz2 命令解压linux-2.6.22....原创 2017-08-10 23:20:00 · 187 阅读 · 0 评论 -
第2阶段——编写uboot之编译测试以及改进(3)
编译测试:1.将写好的uboot复制到linux下面2.make编译,然后将错误的地方修改,生成boot.bin(编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html)3.通过make生成的反汇编来查看代码是否正确4.通过oflash烧写到板子nand flash上5.查看串口是否数据打印发现串口无数据,发现两处错误:5....原创 2017-08-10 09:35:00 · 109 阅读 · 0 评论 -
第2阶段——编写uboot之启动内核和制作Makefile(2)
目标:1 添加头文件setup.h和serial.h2 写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...原创 2017-08-10 09:32:00 · 131 阅读 · 0 评论 -
第2阶段——编写uboot之硬件初始化和制作链接脚本lds(1)
目标:第一阶段:1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash)5.执行main进入第二阶段:6.写main函数,在main()中设置要传给内核的参数,然后跳转内核基地址处7.制作uboot.lds链接脚本编写步骤:...原创 2017-08-10 09:31:00 · 126 阅读 · 0 评论 -
编译make的出错提示解决方案
编译出错笔记:start.s:20: Error: no such instruction: `ldr r0,=WTCON'错误:没有这样的指令 解决:编译文件后缀名必须为大写S,改为start.S start.S:34: Error: bad instruction `ldr,r0,=0x4C000004'错误:坏的指令,指令名ldr后面不能跟逗号 解决:改为ldr r0,=...原创 2017-08-09 16:44:00 · 1000 阅读 · 0 评论 -
第1阶段——uboot分析之启动函数bootm命令 (9)
本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0"中怎么实现bootm命令启动内核.其中bootm要做的事情:a 读取头部,把内核拷贝到合适的地方(0X30008000)b 在do_boom_linux()中把参数给内核准备好,并告诉内核参数的首地址c 在do_boom_linux()...原创 2017-08-09 01:16:00 · 141 阅读 · 0 评论 -
第1阶段——uboot分析之硬件初始化start_armboot函数(5)
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...原创 2017-08-09 00:23:00 · 96 阅读 · 0 评论 -
第1阶段——关于u-boot目标文件start.o中.globl 和.balignl理解(3)
汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为伪操作..globl _start 作用:声明一个_start全局符号(Symbol),这个_start这个符号要被lds链接脚本用到.balignl 16,0xdeadbeef作用:以当前地址开始,在地址为16的倍数的指令位置的上一个指令填入为0xdeadbeef的内容。...原创 2017-07-14 17:20:00 · 117 阅读 · 0 评论 -
第1阶段——u-boot分析之make指令(2)
通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件 本文学习目标: 对Makefile文件进行基本了解,掌握make指令是怎么实现生成uboot.bin的过程1.接下来开始分析make指令,首先打开u-boot-1.1.6/Makefile文件:117 include $(OBJTREE)/include...原创 2017-07-13 17:23:00 · 202 阅读 · 0 评论 -
第1阶段——u-boot分析之make 100ask24x0_config指令(1)
本文学习目标: 掌握"make 100ask24x0_config"指令在Makefile和mkconfig文件中是怎么实现配置芯片选型1.执行make 100ask24x0_config用来配置芯片选型,它执行以下一段,该段在Makefile中定义。首先打开u-boot-1.1.6/Makefile文件:87 SRCTREE := $(CURDIR) ...原创 2017-07-12 11:46:00 · 148 阅读 · 0 评论 -
第1阶段——uboot分析之硬件初始化start.S(4)
分析uboot第一个执行函数_start(cpu/arm920t/start.S)打开cpu/arm920t/start.S1 .globl _start // .globl定义一个全局符号"_start",表明_start这个符号要被链接器用到 2 _start: //_start:系统复...原创 2017-08-09 00:17:00 · 247 阅读 · 0 评论 -
第1阶段——uboot分析之通过nand命令读内核(8)
本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 怎么实现nand命令读内核.1. nand read.jffs2 0x30007FC0 kernel 步骤a: 从NAND FILSHE中kernel分区读出步骤b: 放到0x30007FC0去1.1kernel...原创 2017-08-09 00:52:00 · 194 阅读 · 0 评论 -
第1阶段——uboot分析之仿照bootm制作hello命令(7)
仿照bootm命令生成来制作一个hello命令,功能:打印出hello,world!和参数值1.点击New File ,创建cmd_hello.c将./common/cmd_bootm.c的头文件复制到 cmd_hello.c中(因为cmd_bootm.c的头文件都是包括的命令相关的文件):#include <common.h>#include <watchdog.h>...原创 2017-08-09 00:27:00 · 109 阅读 · 0 评论 -
第1阶段——uboot分析之查找命令run_command函数和命令定义过程(6)
本节主要学习,run_command函数命令查找过程,命令生成过程1.run_command函数命令查找过程分析:在u-boot界面中(main_loop();位于u-boot-1.1.6/common/main.c ):a 输入命令字符串b 将命令字符串代入函数run_command()c run_command():判断命令字符串,在argv[0]里保存命令名,并调用find_cmd(ar...原创 2017-08-09 00:46:00 · 245 阅读 · 0 评论 -
建立uboot,内核的SI工程(1)
1. 建立Uboot的SI工程1.1首先给uboot打上补丁,然后来生成压缩文件tar cjf u-boot-1.1.6_jz2440.tar.bz2 u-boot-1.1.61.2 编译uboot make 100ask24x0_config //使用打好补丁的配置文件来配置 make1.3然后压缩文件拖到windows里,创建SI工程1.4在board目录下只添加...原创 2017-06-15 16:50:00 · 174 阅读 · 0 评论