uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码编译uboot(2012.04.01版本)
Posted Neutionwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码编译uboot(2012.04.01版本)相关的知识,希望对你有一定的参考价值。
0. 教程完整目录
- 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理
- 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)
- 02 - 详细探索uboot启动过程(基于S3C2410处理器)
- 03 - 初步移植uboot 2012.04到JZ2440(修改时钟,配置串口)
- 04 - 移植uboot 2012.04到JZ2440(支持Nor Flash读写)
- 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)
- 06 - 移植uboot 2012.04到JZ2440(支持DM9000C网卡)
- 07 - 移植uboot 2012.04到JZ2440(裁剪uboot大小)
- 08 - 移植uboot 2012.04到JZ2440(设置mtd分区表)
- 09 - 移植uboot 2012.04到JZ2440(设置默认环境变量参数)
- 10 - 移植uboot 2012.04到JZ2440(烧写Linux内核、烧写yaffs2文件系统)
- 11 - 移植uboot 2012.04到JZ2440(移植完成,制作uboot补丁)
1. 硬件准备
俗话说,纸上得来终觉浅,绝知此事要躬行。
要想真正的搞懂uboot,不能只靠查看源码,要准备一块实际可以跑Linux的板子,并且一定要有别人移植好的uboot作为参考。
这里我使用的是JZ2440开发板,处理器是三星的S3C2440,CPU是ARM920T,如图。因为这款处理器移植uboot的资料太太太丰富了,所以在学习阶段,我选择这款处理器。
2. 下载uboot源码
uboot源码可以在DENX 的 FTP服务器下载到已经发布的版本:
版本号之后,带rc的版本表示候选发布版本,不带rc的表示正式发布版本。
2017版本开始,uboot默认board中移除了smdk2410,建议选择2017版本之前的(不包含2017版本)。
这里我下载的是2012.04.04
版本:
下载之后的文件是tar.bz2压缩格式,使用下面的命令解压:
tar -jxvf u-boot-2012.04.01.tar.bz2
3. 远程查看源码
如果你使用的已经是Linux系统,那么直接使用VSCode查看即可。
如果使用的是Windows系统,需要将源码放在Linux虚拟机上进行编译,方便起见,利用VS Code的远程SSH功能登录到Linux虚拟机,直接修改,编译代码,省去Windows主机和Linux虚拟机之间来回传输文件的操作。
VSCode SSH远程登录Linux主机的方法请查看我的另一篇教程:
登录之后在VSCode中打开uboot源码文件夹即可,如下:
查看源码过程中需要不断的在函数间跳转,所以需要安装两个C/C++语言扩展,安装之后即可在函数名右键单击跳转到定义或者声明:
4. uboot源码目录分析
U-Boot 目录下有很多的子目录,分别存放和管理不同的源程序,按照其作用,这些文件夹可分
为3类:
- 与处理器体系结构或者开发板硬件直接相关的目录(arch和board文件夹);
- 通用的函数或者驱动程序;
- U-Boot的应用程序、工具、文档;
/arch
/arm Files generic to ARM architecture
/cpu CPU specific files
/arm720t Files specific to ARM 720 CPUs
/arm920t Files specific to ARM 920 CPUs
/at91 Files specific to Atmel AT91RM9200 CPU
/imx Files specific to Freescale MC9328 i.MX CPUs
/s3c24x0 Files specific to Samsung S3C24X0 CPUs
/arm925t Files specific to ARM 925 CPUs
/arm926ejs Files specific to ARM 926 CPUs
/arm1136 Files specific to ARM 1136 CPUs
/ixp Files specific to Intel XScale IXP CPUs
/pxa Files specific to Intel XScale PXA CPUs
/s3c44b0 Files specific to Samsung S3C44B0 CPUs
/sa1100 Files specific to Intel StrongARM SA1100 CPUs
/lib Architecture specific library files
/avr32 Files generic to AVR32 architecture
/cpu CPU specific files
/lib Architecture specific library files
/blackfin Files generic to Analog Devices Blackfin architecture
/cpu CPU specific files
/lib Architecture specific library files
/x86 Files generic to x86 architecture
/cpu CPU specific files
/lib Architecture specific library files
/m68k Files generic to m68k architecture
/cpu CPU specific files
/mcf52x2 Files specific to Freescale ColdFire MCF52x2 CPUs
/mcf5227x Files specific to Freescale ColdFire MCF5227x CPUs
/mcf532x Files specific to Freescale ColdFire MCF5329 CPUs
/mcf5445x Files specific to Freescale ColdFire MCF5445x CPUs
/mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs
/lib Architecture specific library files
/microblaze Files generic to microblaze architecture
/cpu CPU specific files
/lib Architecture specific library files
/mips Files generic to MIPS architecture
/cpu CPU specific files
/mips32 Files specific to MIPS32 CPUs
/xburst Files specific to Ingenic XBurst CPUs
/lib Architecture specific library files
/nds32 Files generic to NDS32 architecture
/cpu CPU specific files
/n1213 Files specific to Andes Technology N1213 CPUs
/lib Architecture specific library files
/nios2 Files generic to Altera NIOS2 architecture
/cpu CPU specific files
/lib Architecture specific library files
/powerpc Files generic to PowerPC architecture
/cpu CPU specific files
/74xx_7xx Files specific to Freescale MPC74xx and 7xx CPUs
/mpc5xx Files specific to Freescale MPC5xx CPUs
/mpc5xxx Files specific to Freescale MPC5xxx CPUs
/mpc8xx Files specific to Freescale MPC8xx CPUs
/mpc8220 Files specific to Freescale MPC8220 CPUs
/mpc824x Files specific to Freescale MPC824x CPUs
/mpc8260 Files specific to Freescale MPC8260 CPUs
/mpc85xx Files specific to Freescale MPC85xx CPUs
/ppc4xx Files specific to AMCC PowerPC 4xx CPUs
/lib Architecture specific library files
/sh Files generic to SH architecture
/cpu CPU specific files
/sh2 Files specific to sh2 CPUs
/sh3 Files specific to sh3 CPUs
/sh4 Files specific to sh4 CPUs
/lib Architecture specific library files
/sparc Files generic to SPARC architecture
/cpu CPU specific files
/leon2 Files specific to Gaisler LEON2 SPARC CPU
/leon3 Files specific to Gaisler LEON3 SPARC CPU
/lib Architecture specific library files
/api Machine/arch independent API for external apps
/board Board dependent files
/common Misc architecture independent functions
/disk Code for disk drive partition handling
/doc Documentation (don't expect too much)
/drivers Commonly used device drivers
/examples Example code for standalone applications, etc.
/fs Filesystem code (cramfs, ext2, jffs2, etc.)
/include Header Files
/lib Files generic to all architectures
/libfdt Library files to support flattened device trees
/lzma Library files to support LZMA decompression
/lzo Library files to support LZO decompression
/net Networking code
/post Power On Self Test
/rtc Real Time Clock drivers
/tools Tools to build S-Record or U-Boot images, etc.
5. 编译uboot
不同的uboot版本对于arm-linux-gcc编译器有要求,在编译此uboot2012.04.01版本时,使用arm-linux-gcc 4.4.3
版本即可编译。
关于此编译的安装配置方法,请参考我的另一篇教程:
编译uboot很简单,两步即可搞定,这里我以uboot中自带的smdk2410为例(没有s3c2440的板级支持):
- ① 配置编译选项
make smdk2410_config
- ② 编译
make
编译完成之后即可在该目录看到uboot.bin文件:
如果想要清除编译文件,执行如下命令:
make distclean
接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。
以上是关于uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码编译uboot(2012.04.01版本)的主要内容,如果未能解决你的问题,请参考以下文章
uboot研读笔记 | 04 - 移植uboot 2012.04到JZ2440(支持Nor Flash读写)
uboot研读笔记 | 02 - 详细探索uboot启动过程(基于S3C2410处理器)
uboot研读笔记 | 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理
uboot研读笔记 | 13 - uboot编译构建Makefile分析研读(2016.03版本)