1、UBOOT是bootloader的一种,是启动代码,uImage是内核编译之后的产物,u-boot编译后的产物是后缀名为.bin的文件,开发板上完整的系统包含bootloader、内核、文件系统;2,为UBOOT建工程的目的是为了研究UBOOT源码,通过研究UBOOT源码可以知道开发板的启动流程,硬件的初始化顺序,sourceinsight是用来编写代码的;启动代码的作用就是引导操作系统,UBOOT在完成一部分硬件初始化之后就把控制权交给uImage,这个uImage就是内核,内核是操作系统最核心的部分。
vmlinux是内核文件,zImage是一般情况下默认的压缩内核映像文件,压缩vmlinux,加上一段解压启动代码得到。而uImage则是使用工具mkimage对普通的压缩内核映像文件(zImage)加工而得。它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。其实就是一个自动跟手动的区别,有了uImage头部的描述,u-boot就知道对应Image的信息,如果没有头部则需要自己手动去搞那些参数。如何生成uImage文件?首先在uboot的/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行make uImage,如果成功,便可以在arch/arm/boot/目录下发现uImage文件,其大小比 zImage多64个字节。
对于Linux内核,编译可以生成不同格式的映像文件,例如:
# make zImage
# make uImage
zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。
几种linux内核文件的区别:
(1)vmlinux 编译出来的最原始的内核文件,未压缩。
(2)zImage 是vmlinux经过gzip压缩后的文件。
(3)bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
(4)uImage U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
(5)vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
(6)initrd 是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。
2、根文件系统(rootfs=Root File System):其实就是,针对特定的操作系统的架构,一种实现的形式;具体表现为,特定的文件夹,文件夹之间的关系,即组织架构,以及特定的各种文件;从这方面来说,所谓的rootfs,就是那些,能让操作系统正常运行的,文件夹和文件的大集合。
3、GEL文件在ARM初始化时的作用和修改
https://blog.youkuaiyun.com/swallow71701/article/details/21598889
GEL文件做了两件事儿:1.配置ARM:这个只要使用的是AM335x的芯片,这部分的内容基本一致,将ARM配置成为了OPP100的状态,但需要注意DDR的频率配置;2.配置DDR:这个是差异最大的一点,因为板子上使用的DDR芯片不同(类型不同:DDR2、DDR3、LPDDR;不同厂家、相同厂家不同型号的时序参数不一样),板子的layout布线也不一样,所以这里多半是要做改动的!总得来说,需要改的内容就两大块:一个是DDR的EMIF时序配置;一个是DDR的PHY时序配置。如果是DDR3,还需要做software leveling(这个可以理解为使用时序优化的算法程序获得最佳的PHY时序配置)。