首先感谢参考的博客:https://blog.csdn.net/jklinux/article/details/72625586
首先,你需要开发板厂家提供的SDK源码包,一般情况下,源码包下已经包含了该开发板适用的uboot、Linux系统内核以及文件系统源码包;并且厂家会为你提供编译这些源码时的默认配置文件。 简单介绍一下Linux操作系统的启动流程:uboot(sd卡内部)->Linux系统内核(加载到内存运行)->挂载busybox文件系统。
接下来,你需要准备一张8G的高速的SD卡,因为香程派没有内部FLASH内存芯片,所以需要一张外置的SD卡作为存储器,包括后面的Linux系统内核镜像文件和文件系统,都将烧写在这张SD卡上。SD卡要实现删除所有的分区:ubuntu系统下可以使用一个可视化工具gparted来解决,Window下面进入磁盘管理后,可以删除磁盘的卷(这个不作详细阐述)。准备好SD卡后,我们开始在ubuntu系统上来完成编译移植。
第一步:下载工具:dtc,该工具是用于Linux内核的设备树工具;官方下载地址:dtc工具源码下载。我在这里下载的版本是:dtc-1.6.0.tar.gz;下载后解压到目标目录,make&make install。你好需要下载一些交叉编译需要的依赖库:
yum install libusb*
yum install glibc*i686
yum install zlib*i686
yum install libstdc++*i686 yum install libusb*
yum install glibc*i686
yum install zlib*i686
yum install libstdc++*i686
需要注意的是,这些依赖库的具体名称对应到ubuntu或redhat会有所区别,这里我列出ubuntu的:
sudo apt-get install libgtk2.0-0:i386 libxtst6:i386 gtk2-engines-murrine:i386 \
lib32stdc++6 libxt6:i386 libdbus-glib-1-2:i386 libasound2:i386
apt-get install zlib1g-dev
第二步:找到由厂家提供的SDK源码包,解压并进入目录:orangepi_sdk.tar.bz2;接下来的编译步骤其实与开发板厂家有关:
编译uboot:
1). 解包orangepi_sdk.tar.bz2
进入orangepi_sdk目录
2). mkdir output //创建目录,用于存放编译生成的程序镜像
mkdir output/u-boot/ //创建uboot子目录
mkdir output/dtb/ //创建设备树子目录
yum install ncurses* // ncurses是个终端的图形库, 用于配置编译项使用
进入toolchain/sunxi-tools目录:
执行make //编译出用于生成内核的script.bin工具(bin2fex fex2bin)
cp bin2fex fex2bin sunxi-fexc /bin/ //复制这几个工具到系统的bin目录
3). 回到orangepi_sdk目录下:
make config_uboot // 配置uboot, 出现配置界面后,直接退出就可以了.
make uboot // 编译uboot
第一次时会发生错误: make_uboot.sh: line 31: mkimage: command not found
发生错误后: cp source/u-boot-2016.07/tools/mkimage /bin/
再次执行"make uboot" //mkimage工具用于内核镜像上加文件头用
编译完成后,在output/u-boot/目录里有:
boot.scr script.bin u-boot-sunxi-with-spl.bin
// boot.src其实是个uboot环境变量存放文件
4). 把sd卡放入读卡器,再接入pc, 确认它的设备文件(一般是/dev/sdb)
make install_uboot sdcard=/dev/sdb //把uboot镜像烧入sd卡的指定扇区位置
5). 安装pc端的uart工具
yum install minicom*
配置minicom: minicom -s
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols |
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
选择"Serial port setup"
+-----------------------------------------------------------------------+
| A - Serial Device : /dev/ttyUSB0 |
| |
| C - Callin Program : |
| D - Callout Program : |
| E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : No |
| G - Software Flow Control : No |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
注意: /dev/ttyS0表示PC机后面的RS232接口, usb转232接口得设为/dev/ttyUSB0
选择好后, “Save setup as dfl”, 保存好后,以后使用时直接输入命令"minicom"即可
// 退出minicom, 先按"ctrl+a", 松手后再按'q'键,即可选择退出
6). 把sd卡接到板子上,接上电源线,uart线.在minicom里会有信息:
U-Boot SPL 2016.07-cazure (May 22 2017 - 12:28:32)
DRAM: 512 MiB
Trying to boot from MMC1
U-Boot 2016.07-cazure (May 22 2017 - 12:28:32 +0800) Allwinner Technology
CPU: Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi
DRAM: 512 MiB
MMC: SUNXI SD/MMC: 0
In: serial
Out: serial
Err: serial
Net: No ethernet found.
starting USB...
USB0: USB EHCI 1.00
USB1: USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) found
Hit any key to stop autoboot: 0 //出现这句信息时按任意键就会停住
u-boot@orangepi#