前言

最近用jz2440搞uboot,发现课本上的一些步骤不是很清楚,经过一整天的折腾总算成功编译uboot-1.1.6,决定从头写一篇笔记记录一下。

准备工作

  • 安装VMware并装好Ubuntu-22.04(这部分书上有详细教程网上也有很多,这边就不说了)
  • 去网盘下载所需文件:点击跳转
  • 一台正常的电脑
  • 脑子

开始前的一些设置

将网络更改为桥接模式

先把虚拟机关机,点击编辑虚拟机设置→网络适配器→网络连接中的桥接模式,然后这个时候你会发现虚拟机里面是没有网的,我们点击VMware菜单栏中的编辑选项选择虚拟网络编辑器,点击虚拟网络编辑器右下角的更改设置,然后选中桥接模式,在下面的VMnet信息中,将已桥接至后面的选项栏打开选择你自己电脑的有线网卡,最后点击下方的确定即可。

打开网络设置,设置有线网络,IPv4选项中IPv4方法改为手动,下面地址栏里面输入与你自己电脑同网段的IP,在你的Windows电脑下按下win+r然后输入cmd,在打开的命令窗口中输入ipconfig然后会显示你的电脑上所有网络适配器的信息,找到以太网网络适配器 以太网,这里我们能看到IPv4地址、子网掩码和默认网关,子网掩码和默认网关直接填入Ubuntu中对应的位置,DNS那一栏也填入默认网关,地址那一栏填入与你电脑同网段且未被占用的地址,例如我的电脑IP是192.168.1.2,那么我可以在Ubuntu中填入192.168.1.3(如果你不知道这个IP是否被占用那就在最后一部分(四个.分为四部分)随机取一个2-255的数字,注意只能改最后一部分,前面三个部分一定要和你电脑上的保持一致192.168.1.x),修改完成后点击应用,然后重新开、关有线网络。在桌面打开一个终端,输入ping www.baidu.com若返回的数据包如下图所示则表示网络已连接(请先确保你自己的电脑网络已连接,有个憨憨在虚拟机里面折腾了半天发现自己电脑没联网😶)

安装VMware Tools

在VMware的菜单栏中选择虚拟机点击安装VMware Tools,然后Ubuntu中就会弹出一个VMware Tools的光驱,找到VMwareTools-xxxx-tar.gz的压缩包,将它拖到桌面上,然后在桌面打开一个终端,输入tar -xzvf VMwareTools-xxxx-tar.gz来解压压缩包,解压后桌面会出现vmware-tools-distrib文件夹,输入cd vmware-tools-distrib进入这个文件夹中,接着输入sudo ./vmware-install.pl命令安装,输入密码后第一处选项输入yes,后面全部都是按Enter默认,等待安装...安装完成后重启Ubuntu。

如果重启后发现自己电脑里复制的内容还是无法在Ubuntu中粘贴,请尝试以下命令

sudo apt upgrade
sudo apt install open-vm-tools-desktop -y
sudo reboot

修改主文件夹下的文件夹名为英文

安装中文版的Ubuntu后主文件夹中的文件夹名都是中文(桌面、视频、图片等),这在后续输入命令的时候非常不方便,例如我们要输入路径/home/sora/桌面/test时,当输入到桌面时要切换到中文输入法输完后又要切换到英文继续输入,这极大影响了我们的效率,所以我们要把这几个文件夹改成英文的。首先在桌面打开终端,依次输入以下命令

export LANG=en_US
xdg-user-dirs-gtk-update

在弹出的窗口中选择Update Names(注意不要勾选Don't ask me this again),然后重启Ubuntu。重启后会弹出一个页面,勾选不要再次询问我然后点击保留旧的名称,在桌面打开一个终端,输入以下命令然后重启Ubuntu即可。

export LANG=zh_CN

更换下载源

由于Ubuntu的下载服务器默认是在国外,国内访问速度很慢,所以我们需要更换国内的镜像源来加快下载速度。首先打开清华大学开源软件镜像站-Ubuntu软件仓库,在传统格式下方选择Ubuntu的版本,然后下方代码块中的内容就是一会要使用的下载源。回到Ubuntu中,在桌面上打开一个终端,输入以下命令

sudo cp /etc/apt/sources.list /etc/apt/sources_bak.list
sudo gedit /etc/apt/sources.list

通过gedit打开sources.list文件后将里面的内容全部删除,然后将清华大学开源软件镜像站-Ubuntu软件仓库页面中的下载源复制进来,完成后保存即可。接着更新软件列表和软件包,输入以下命令,等待执行完毕即可(可能有点慢耐心等待一下)

sudo apt-get update
sudo apt-get upgrade

在Ubuntu系统中建立交叉编译环境

创建项目工作目录

由于本文已介绍过如何安装VMware Tools来实现实体机与虚拟机之间的复制粘贴,将不再介绍如何创建FTP、SSH、NFS等文件传输服务,如有需要请另找教程。

首先在home下的用户主文件夹(主目录)中创建名为jz2440的文件夹,输入以下命令,注意:命令中的sora为我的用户名,在实际操作用应更换为你的用户名,否则会提示bash: cd: /xxx: 没有那个文件或目录

mkdir /home/sora/jz2440

在主文件夹中可以看到已经创建了jz2440文件夹,接着我们要进入到jz2440文件夹中去创建uboot以及其他子目录,输入以下命令

cd /home/sora/jz2440
mkdir crosstool bare_metal uboot linux_kernel busybox rootfs image vm_tools tmp

安装一些相关工具和程序库

在Ubuntu上需要安装bison(语法分析器)、 flex(词法分析器)、 build-essential(C/C++编译环境,包括编译C/C++程序需要的软件包、相关工具等)、patch (Linux下的补丁工具)、 libncurses5-dev库(调用ncurses图形库时需要用的,比如在执行make menuconfig 时必须安装这个库)、libc6-i386(64位Ubuntu上运行32位的软件所必需的库)等软件包,安装命令如下(这部分可以暂时先不操作,等后面要用的时候报错信息中会提示你需要安装)

sudo apt install bison flex build-essential patch libncurses5-dev libc6-i386

交叉编译工具链

由于我们虚拟机中的Ubuntu是x86_64架构的而开发版是ARM架构,所以我们需要在Ubuntu中安装ARM架构的gcc用于后续编译出ARM架构的文件供开发版使用。

这里使用的交叉编译工具链是arm-linux-gcc-4.3.2,将arm-linux-gcc-4.3.2.tar.bz2复制到jz2440下的crosstool文件夹中并在crosstool目录下右键打开一个命令窗口,输入以下命令进行解压,解压后会生成arm-linux-gcc-4.3.2文件夹

tar -xjvf arm-linux-gcc-4.3.2.tar.bz2

要想在Ubuntu的任意位置都能够使用交叉编译工具链还需要配置环境变量,首先打开/etc/bash.bashrc文件:

sudo gedit /etc/bash.bashrc

/etc/bash.bashrc文件末尾新增一行:

export PATH=$PATH:/home/sora/jz2440/crosstool/arm-linux-gcc-4.3.2/bin

其中PATH:后面的路径是要到~/arm-linux-gcc-4.3.2/bin目录下,如果你的路径跟我不一样注意修改。修改好以后就保存退出,重启Ubuntu,重启后输入以下命令查看交叉编译工具的版本号,如果能显示出版本号,交叉编译工具链 (编译器)就安装成功了。

arm-linux-gcc -v

输入以下命令安装交叉编译的相关库

sudo apt-get install lsb-core lib32stdc++6

jz2440开发板的 U-Boot配置及编译

U-Boot的配置

u-boot-1.1.6.tar.bz2u-boot-1.1.6_jz2440.patch两个文件复制到~/jz2440/uboot文件夹中,然后在uboot文件夹下打开一个终端,输入以下命令解压u-boot-1.1.6.tar.bz2

tar -xjvf u-boot-1.1.6.tar.bz2

解压完成后进入u-boot-1.1.6目录,然后进行修补u-boot,命令如下:

cd u-boot-1.1.6
patch -p1 < ../u-boot-1.1.6_jz2440.patch

执行 make 100ask24x0 config命令, 配置JZ2440_V3 开发板。

make 100ask24x0_config

修改uboot的mtd分区的默认值

gedit include/configs/100ask24x0.h

定位到59行的位置,进行如下修改:

"2m(kernel)," \
"4m(kernel)," \

打开目录~/jz2440/uboot/u-boot-1.1.6/cpu/arm920t,将网盘中的config.mk复制进去替换原文件,然后再回到~/jz2440/uboot/u-boot-1.1.6目录中找到Makefile文件,双击打开定位到218行,在这一行的最前面输入#来注释掉这一行,然后在下一行中输入以下内容,注意后面路径中的用户名要改

PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc -lc -L /home/sora/jz2440/crosstool/arm-linux-gcc-4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib

交叉编译uboot,生成elf格式的u-boot以及u-boot.bin二进制镜像文件

make

看到图中内容即为编译成功,在~/jz2440/uboot/u-boot-1.1.6目录下可以找到编译好的u-boot.bin文件,然后把u-boot.bin文件复制出来,使用J-Flash和JLink将其烧写到NOR Flash里就行了!