编译初体验:打补丁编译烧写
先给出四步骤:
① 解压缩:tar xjf ***.bz2;(uboot源代码压缩文件)
② 打补丁:patch -p1 < …补丁文件;
③ 配置:make 100ask24x0_config;配置,以让这个u-boot支持不同的开发板;
(其实也是makefile中的一个目标)
④ 编译:make;
一、概念引入
Windows系统启动过程,PC上电 => 进入BIOS(引导操作系统)=> windows => 识别C,D等的硬盘 => 运行应用程序
嵌入式系统启动过程,上电 => bootloader(引导内核)=> LINUX => 挂接根文件系统 => 运行应用程序
uboot最终目的是启动内核!从flash读出内核,放到SDRAM,然后启动内核!
内核一定小于64M吗????
二、打补丁
文件夹中有两个文件:
第一个是未修改过的原版,下面是补丁。
源码包世界各地都可以下载,我们给别人补丁就行了,小。
怎么打补丁:
摘出一部分看一下补丁文件:
这意思是说:源代码从34行开始,总共有6行,修改后的代码是从34行开始,总共八行。
所以后面修改的部分,修改前的是53行开始的,修改后的是55行开始,多了上面加的这两行。
补丁打到哪里去?在补丁文件中有指示:
就是打到u-boot-1.1.6/board/100ask24x0/100ask24x0.c这个文件中。我们现在已经在u-boot-1.1.6/目录了,所以要把这一层目录忽略掉。所以加上一个参数-p1。参数 -p1 。是指忽略去第一 个“/”。
(一个补丁会修改多个文件,所以会有多个上面这三行内容,针对不同的文件。)
补充:
怎样生成补丁文件?
三、make 100ask24x0_config
移动到下文编译过程中了。
四、启动uboot看一下:
原版UBOOT是没有这个菜单的,韦老师加入的。
貌似,q退出菜单后才能正常使用uboot的命令!
命令行输入menu 就可回到uboot菜单,这个命令也是韦老师加的。
?或者help可以看到uboot的命令。
在u-boot使用print 命令,输出的都是环境变量,修改环境变量,
要使用set命令,设置完之后要save保存,然后reset命令重启:
五、重申uboot要实现的目的
为了达到这个目的,就要求uboot得实现这些功能(读flash,初始化sdram,启动内核)。
其余的都是为了方便开发的。
uboot从flash上面读出内核,那么内核是怎么弄到flash上面呢?
(生产的时候可以用烧写工具来烧写,)
但是我们开发过程是用UBOOT通过网络或者USB弄到flash上面的,这就涉及到了写flash这个功能了。
首先要明确:uboot目标是从flash读出内核(nand read.jffs2 0x30007FC0 kernel;),启动它(bootm 0x30007FC0)。
注:初始化时钟,单板上电后是以12M运行的(晶振为12M)。
看UBOOT的代码,很多文件夹和文件。怎么学习这个框架呢?
要想这些文件怎么组织起来,就要看它的makefile了。
uboot的Make 100ask24x0_config过程
https://www.cnblogs.com/lifexy/p/7154657.html
http://blog.chinaunix.net/uid-20671208-id-3539867.html
100ask24x0_config是自己写在uboot的makefile中的一个目标。
MKCONFIG这个变量表示的一个脚本。后面的 arm ar920t等等是这个脚本的启动参数。
@加在一个命令前面表示不打印出命令(静默执行)。
(通常,make会把其要执行的命令行在命令执行前输出到屏幕上。)
第二步:进入mkconfig文件,这是脚本文件,用的linux_shell语法!!!!
摘取一部分看一下(虽然这个文件很短):