前言

此篇为少量或无需配置的开发,可帮助您快速上手,串口输出、点屏等操作确认 Nano 完好~

具体详细配置与解释说明,将在后文进行较为详细的介绍;

如果您和笔者一样是个小白萌新,希望能给您的学习提供一点小小的tips;

如果您已熟悉此流程,快速浏览即可 :)

笔者所用环境为:

ubuntu 16.04 LTS 64位

u-boot 初体验

安装交叉编译链
首先需要安装交叉编译链:

# 此处为获取7.2.1版本,您可获取其他版本或者通过链接直接下载
wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
sudo cp -r ./gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi /opt/

sudo vim /etc/bash.bashrc

# 在文件末尾 添加以下内容
PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin"
# 添加完毕

# 使路径生效
source /etc/bash.bashrc

此时可用 arm-linux-gnueabi-gcc -v 进行测试;若普通用户状态下没有成功,通过 sudo su 切换到root用户再尝试;
gcc交叉编译

编译 u-boot

然后从github上拉取对 Nano 进行了适配的 u-boot:

sudo apt-get install git
git clone https://github.com/Lichee-Pi/u-boot.git
cd u-boot

# 查看分支
git branch -a
# 切换到 Nano 分支
git checkout nano-v2018.01

u-boot 对于新手来说目录层级稍显复杂,您可参考下表进行快速的熟悉和目标文件定位(搬运并修改自 荔枝派One)

.
├── api             //封装一些平台无关的操作,如字符串打印,显示,网络,内存
├── arch            //以平台架构区分
│   ├──arm
│   │   └──cpu
│   │   │   └──arm926ejs
│   │   │   │   └──sunxi   //cpu相关的一些操作,如定时器读取
│   │   │   │   │   └──u-boot-spl.lds  //spl的放置方法
│   │   └──dts
│   │   │   └──suniv-f1c100s-licheepi-nano.dts   // f1c100s芯片的一些配置
│   │   │   └──suniv-f1c100s-licheepi-nano.dtb
│   │   │   └──suniv-f1c100s.dtsi
│   │   │   └──suniv.dtsi
│   │   └──lib      //一些库文件
│   │   └──mach-sunxi
│   │   │   └──board.c          //board_init_f
│   │   │   └──dram_sun4i.c     //ddr的操作,复位,时钟,延时,odt,etc.
│   │   │   └──dram_helpers.c   //ddr的设置及读写测试
├── board
│   ├──sunxi
│   │   └──board.c              //sunxi_board_init 入口
│   │   └──dram_suniv.c        //DRAM的一些默认参数
├── cmd             //Uboot命令行的一些命令
├── common          //含spl
├── configs         //menuconfig里的默认配置,比如各类驱动适配
│   ├── licheepi_nano_defconfig
│   ├── licheepi_nano_spiflash_defconfig
├── disk            //硬盘分区的驱动
├── doc
├── drivers         //外设驱动
├── dts
├── examples
├── fs              //多种文件系统
├── include
│   ├──configs
│   │   └──sunxi_common.h   //预配置的参数,如串口号等
│   │   └──suniv.h
├── lib             //加密压缩等算法
├── net             //nfs,tftp等网络协议
├── post
├── scripts

了解u-boot大致结构后,我们就可以开始尝试编译了;
下面几步如果无法正常运行,请安装组件 ncurses devel

apt-get install libncurses5-dev
# 此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm,设定各项默认配置为 nano 的spiflash支持版
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_spiflash_defconfig

# 若不带spi-flash的板子,请换成 licheepi_nano_defconfig

# 进行可视化配置
make ARCH=arm menuconfig

可视化
若要在套餐中附带的LCD上输出显示,请通过配置 ARM architecture ‣ Enable graphical uboot console on HDMI, LCD or VGA 为 Y

接着配置同级的 LCD panel timing details 为:
x:480,y:272,depth:18,pclk_khz:10000,le:42,ri:8,up:11,lo:4,hs:1,vs:1,sync:3,vmode:0
注:此块屏为为 480x272 规格,如为 800x480 请尝试如下配置
x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0
并将 LCD panel backlight pwm pin 设为:PE6
配置

# 开始编译
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

这里如果提示gcc版本不够请检查和升级版本gcc -v(如下是升级到gcc6.1)

#环境安装
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential libgmp-dev libmpfr-dev libmpc-dev
#下载安装
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz
tar -zvxf gcc-6.1.0.tar.gz --directory=/usr/local/
cd /usr/local/gcc-6.1.0
sudo ./contrib/download_prerequisites
sudo mkdir build && cd build
sudo ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
sudo make -j4 && sudo make install

(如果不能编译有两种方法,第一种是更新gcc第二种是更新系统版本到17以上,推荐第二种)
编译完成后,可一看到目录下多了一堆以u-boot带头的文件,我们只需取 u-boot-sunxi-with-spl.bin 即可;