一. 烧写 Superboot
1.1 相关资料获取
本小节主要讲述如何使用韦东山老师开发的 oflash 工具配合 OpenJTAG 下载器下载友善之臂光盘提供的 superboot 到 mini2440 开发板的 nor flash 上。
为什么要下载 superboot 到 nor flash 上?
是因为 superboot 可以配合 FriendlyARM 开发的 miniTools 工具快速烧写系统到 mini2440 开发板上。
涉及到的资源有:
- oflash 工具
- OpenJTAG 驱动程序
- superboot 镜像
如何获取这些资源:
- oflash 和 OpenJTAG 驱动可以在韦东山老师的 JZ2440 开发板光盘资料中获取。
- superboot 镜像可以在友善之臂 mini2440 开发板光盘资料中获取。
对应的光盘资料可以去对应的论坛获取,论坛网址如下:
- JZ2440 论坛: http://www.100ask.net/bbs/forum.php
- FriendlARM 论坛: http://www.arm9home.net/
1.2 安装 oflash 程序
安装 oflash 工具
oflash 安装包路径:JZ2440光盘\烧写工具\裸机\eop&op\调试工具\01.OpenOCD with GUI setup.exe
使用管理员权限安装 OpenOCD with GUI setup.exe 即可在 cmd.exe 命令行里执行 oflash 程序。
验证是否安装成功
依次执行:Win + R -> 输入 cmd 调起控制台 -> 输入 oflash 执行,出现以下提示说明 oflash 安装成功。
1 | C:\Users\user>oflash |
1.3 安装 OpenJTAG 驱动
手动安装 OpenJTAG 驱动
OpenJATG 驱动程序路径:JZ2440光盘\烧写工具\裸机\eop&op\驱动\OpenJTAG*
将 OpenJTAG 插入电脑 -> 右键我的电脑 -> 管理 -> 设备管理器。可以看到其他设备里面有两个 USB <==> JTAG&&RS232 设备,但是旁边有感叹号,说明这两个设备并没有驱动。
手动去安装 OpenJTAG 的驱动程序,右键 “USB <==> JTAG&&RS232” -> 更新驱动程序 -> 浏览计算机以查找驱动程序 -> 路径选择到 OpenJATG 驱动文件夹 -> 点击下一步,开始安装驱动。
但是,报了一个这样的错,文件的哈希值不在指定的目录文件。
解决 OpenJTAG 驱动安装不上的问题
百度查了一下,原因是因为老设备的驱动没有更新,和新系统 Win 8 或 Win 10 系统不兼容,没得到数字签名通过。要正常安装驱动程序,需要强制关闭数字签名。
怎么操作:
开始菜单 -> 设置 -> 更新和安全 -> 恢复 -> 立即重启 -> 疑难解答 -> 高级选项 -> 启动设置 -> 重启 -> 电脑重启后,出现选择界面,F7选择禁止验证驱动签名。
设置好之后,重新手动安装,注意这里需要安装三次驱动。分别是:
1.4 下载 superboot 到 mini2440 开发板上
使用 oflash 开始烧写 superboot
superboot 镜像路径:mini2440光盘\images\Superboot2440.bin
开发板上电(不管是 nor 还是 nand 启动都行),使用 OpenJTAG 连接好开发板和电脑,运行 cmd 程序,切换到 superboot 所在目录,依次执行:
1 | E:\Material\mini2440\FriendlyARM-2440-DVD\images>oflash Superboot2440.bin |
验证是否烧录成功
mini2440 切换到 nor 启动,连接串口终端,出现如下提示则表示烧录成功。
1 | Superboot-2440 V1.5(20150414) by FriendlyARM |
二. 使用 miniTool 刷机
2.1 安装 miniTools 工具
miniTools 安装包路径:mini2440光盘\windows平台工具\MiniTools-USB下载工具\MiniToolsSetup-Windows-20150528.exe
Windows 平台下安装 MiniTools 工具,双击安装即可。安装好后桌面会出现 miniTools 应用的图标,双击执行效果为:
2.2 安装 mini2440 驱动程序
mini2440 usb 驱动程序路径:
mini2440光盘\windows平台工具\usb下载驱动\FriendlyARM USB Download Driver Setup_20090421.exe
直接安装无法安装上,同样需要用 usb 线连接好了 mini2440 后在设备管理器下手动去安装驱动,针对 Win 8 和 Win 10 也是需要强制关闭数字签名后才能安装的上。
驱动安装成功后设备管理器截图:
2.3 使用 miniTools 给 mini2440 刷系统
使用 usb 线连接好 mini2440 和电脑,mini2440 使用 nor 启动,然后运行 miniTools,此时显示的是开发板信息。
切换到 linux 选项下,直接选择从光盘目录中的 image 目录自动导入,然后修改好自己手头上 mini2440 搭配的屏即可开始烧写。
点击开始烧写,等待烧写完成。
2.4 验证是否烧写成功
mini2440 切换到 nand 启动模式,开机,看是否能成功启动 kernel,这里贴出部分开机 log:
1 | Superboot-2440 V1.5(20150414) by FriendlyARM |
最后能出现控制台说明 kernel 正常启动了。
三. 编译 linux-2.6.32.2 内核
3.1 准备好开发环境
需要创建一个 Ubuntu 虚拟机,并且安装好 VMwareTools 方便和 Windows 之间传文件。
创建好一个 mini2440 的工作目录,后续所有 mini2440 相关的文件均存放在此目录下。
1 | user@vmware:~$ mkdir -p workspace/mini2440 |
3.2 安装交叉编译器
在 mini2440 工作目录下创建 package 目录,存放软件包。
1 | user@vmware:~$ mkdir workspace/mini2440/package |
拷贝 mini2440光盘\Linux\arm-linux-gcc-4.4.3.tar.gz 到虚拟机 /home/user/workspace/mini2440/package 目录下。
解压到 /opt 目录下并配置好环境变量.
1 | user@vmware:~$ cd workspace/mini2440/package/ |
验证交叉编译器是否安装成功。
1 | user@vmware:~$ arm-linux-gcc -v |
没有正确的显示版本号,百度查了一下,原因是虚拟机的 Ubuntu 是 64 位的,而此交叉编译器是 32 位的版本,要想正常使用,需要安装 32 位兼容库。
1 | user@vmware:~$ sudo apt-get install lib32ncurses5 |
安装好兼容库之后,验证成功。
1 | user@vmware:~$ arm-linux-gcc -v |
3.3 配置 linux 内核
同样将 mini2440光盘\Linux\linux-2.6.32.2-mini2440-20150709.tgz 文件拷贝到虚拟机 /home/user/workspace/mini2440/package 目录下。
解压开来,可以看到有很多的配置文件,当然还是挑自己板子搭配屏的配置文件。
1 | user@vmware:~/workspace/mini2440/package$ tar zxf linux-2.6.32.2-mini2440-20150709.tgz -C ../ |
开始配置,拷贝配置文件,执行 make menuconfig 生成对应 C 语言配置宏文件和 Makefile 编译宏控文件。
1 | user@vmware:~/workspace/mini2440/linux-2.6.32.2$ make distclean |
报错了,提示说需要 ncurses 库,安装好库之后,成功配置。
1 | user@vmware:~/workspace/mini2440/linux-2.6.32.2$ sudo apt-get install libncurses |
进入图形化配置界面后,直接按 esc 退出即可,配置项已经拷贝到最终的配置文件 .config 文件中了,执行 make menuconfig 的作用,只是去自动生成 Makefile 和 c 语言宏控文件。
3.4 编译内核
配置 ok 了,要开始编译内核了。
1 | user@vmware:~/workspace/mini2440/linux-2.6.32.2$ make |
可是又报错了,提示说是找不到 libstdc++.so.6 这个库。安装一下试试:
1 | user@vmware:~/workspace/mini2440/linux-2.6.32.2$ sudo apt-get install lib32stdc++6 |
库安装好了之后,果然可以开始编译了。
1 | user@vmware:~/workspace/mini2440/linux-2.6.32.2$ make |
可是又报错了,看提示说 ‘defined(@array)’语法有问题,将 kernel/timeconst.pl 文件中 373 行 “if (!defined(@val)) {“ 修改为 “if (!@val) {“ 后编译成功。
1 | diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl |
编译成功提示如下,同时会在 arch/arm/boot/ 目录下生成 zImage 内核镜像文件。
1 | user@vmware:~/workspace/mini2440/linux-2.6.32.2$ make |
四. 使用 nfs 传输文件
4.1 Ubuntu 安装 nfs 服务器
NFS 介绍
NFS 即网络文件系统(Network File-System),可以通过网络让不同机器、不同系统之间可以实现文件共享。通过 NFS,可以访问远程共享目录,就像访问本地磁盘一样。在 ubuntu 主机上安装 nfs 服务器,开发板便可以通过网络访问 ubuntu 主机上的共享的文件。
ubuntu 下安装 nfs 服务器。
1 | user@vmware:~$ sudo apt-get install nfs-kernel-server # 安装 NFS 服务器端 |
配置 nfs 共享目录
安装完 NFS 服务器后,需要指定共享的 NFS 目录,其方法是在 “/etc/exports” 文件里面设置对应的目录及相应的访问权限,每一行对应一个设置。
配置 /home/user/board/ 目录为 nfs 共享的目录,需要修改 “/etc/exports” 文件,添加一行:
1 | /home/user/board/ *(rw,sync,no_root_squash) |
建立 nfs 共享文件夹
修改完成后,保存并退出 /etc/exports 文件。然后新建 /home/user/board 目录,并为该目录设置最宽松的权限:
1 | user@vmware:~$ sudo mkdir -p /home/user/board |
开启 nfs 服务器
1 | user@vmware:~$ sudo /etc/init.d/nfs-kernel-server start # 开启 nfs 服务器 |
4.2 开发板挂载 nfs 共享目录
开发板接好网线,保证开发板和虚拟机在同一个局域网下,执行以下命令,挂载 /home/user/board 目录到开发板的 /mnt 目录下。
1 | [root@FriendlyARM /]# ifconfig eth0 192.168.1.111 |
其中 192.168.1.100 是 Ubuntu 虚拟机 ip 地址,/home/user/board 是虚拟机 nfs 服务器共享的目录。