uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)

项目开源地址:https://github.com/Mculover666/uboot-jz2440

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的资料太太太丰富了,所以在学习阶段,我选择这款处理器。
uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)_第1张图片

2. 下载uboot源码

uboot源码可以在DENX 的 FTP服务器下载到已经发布的版本:

  • FTP下载服务器链接

版本号之后,带rc的版本表示候选发布版本,不带rc的表示正式发布版本。

2017版本开始,uboot默认board中移除了smdk2410,建议选择2017版本之前的(不包含2017版本)。

这里我下载的是2012.04.04版本:
uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)_第2张图片

下载之后的文件是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主机的方法请查看我的另一篇教程:

  • 【宇宙最强编辑器VS Code】(十)使用VS Code + SSH进行远程开发

登录之后在VSCode中打开uboot源码文件夹即可,如下:
uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)_第3张图片

查看源码过程中需要不断的在函数间跳转,所以需要安装两个C/C++语言扩展,安装之后即可在函数名右键单击跳转到定义或者声明:
uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)_第4张图片

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 版本即可编译。

关于此编译的安装配置方法,请参考我的另一篇教程:

  • S3C2440-裸机篇-02 | 安装和使用arm-linux-gcc交叉编译工具链

编译uboot很简单,两步即可搞定,这里我以uboot中自带的smdk2410为例(没有s3c2440的板级支持):

  • ① 配置编译选项
make smdk2410_config
  • ② 编译
make

uboot研读笔记 | 01 - 下载uboot源码并使用VSCode远程查看源码、编译uboot(2012.04.01版本)_第5张图片

编译完成之后即可在该目录看到uboot.bin文件:

如果想要清除编译文件,执行如下命令:

make distclean

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』

你可能感兴趣的:(#,uboot研读笔记)