一.Uboot制作

1.安装交叉编译器

获取交叉编译工具:

wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
sudo tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz -C /opt

将交叉编译器加入到系统的环境变量中,编辑文件bashrc,将export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH添加到文件末尾:

nano ~/.bashrc # 用自己喜欢的编辑器编辑

保存退出,执行下面命令更新环境变量:

source ~/.bashrc

测试交叉编译环境是否安装成功:

arm-linux-gnueabihf-gcc -v

上述用来查看 arm-linux-gcc 的版本,输出信息如下说明交叉编译环境安装成功:

2.下载Uboot

git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current
#or git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental
cd u-boot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
#or make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero480x272LCD_defconfig
#or make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_defconfig

若需要自己配置,执行:

make ARCH=arm menuconfig

3.配置环境变量

修改u-boot/include/configs/sun8i.h文件,添加以下内容,注意添加的位置在“#include <configs/sunxi-common.h>”的前边。

#define CONFIG_BOOTCOMMAND "setenv bootm_boot_mode sec; load mmc 0:1 0x41000000 zImage; load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; bootz 0x41000000 - 0x41800000;"
#define CONFIG_BOOTARGS    "console=ttyS0,115200 panic=5 mtdparts=tf:1M(uboot),64k(dtb),4M(kernel),-(rootfs) rootwait root=/dev/mmcblk0p2 earlyprintk rw  vt.global_cursor_default=0"

4.编译

切到u-boot目录下执行:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

编译完成后,在当前目录下生成了u-boot-sunxi-with-spl.bin,需要烧录到8K偏移处启动。

二.Linux内核编译

1.下载Linux源码

推荐用4.13分支的:

git clone -b zero-4.13.y https://github.com/Lichee-Pi/linux.git

2.配置编译

cd linux
make ARCH=arm licheepi_zero_defconfig
make ARCH=arm menuconfig   #add bluethooth, etc.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules_install

根据实际需要配置Linux内核。

编译完成后,zImagearch/arm/boot/下,驱动模块在out/下,sun8i-v3s-licheepi-zero-dock.dtbarch/arm/boot/dts/下。

三.buildroot根文件系统制作

1.下载buildroot

首先安装下Linux的头文件:

sudo apt-get install linux-headers-$(uname -r)

获取buildroot:

wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
tar -xvf buildroot-2017.08.tar.gz

2.配置buildroot

执行:

cd buildroot-2017.08/
make menuconfig

首先配置工具链,因为之前开发uboot和内核都用到了自己下载的工具链,所以这里也配置成外部工具链。

  • 在本机上外部工具链配置为: /opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/
  • 工具链前缀是: arm-linux-gnueabihf
  • 外部工具链gcc版本:我们使用的是最新的6.3版本
  • 外部工具链内核头文件:是在 arm-linux-gnueabi/libc/usr/include/linux/version.h 里读取内核版本信息。本机的版本是4.6
  • C库还是选择传统的glibc。需要小体积可以选uclibc(需要自行编译安装)。
  • 再在system 设置下主机名,root密码等。
  • 最后就是配置自己需要的软件包,在menuconfig中选中即可。
  • 有时候下载速度慢,可以复制下载链接,使用迅雷等下载好后,拷贝到dl目录下,会自动识别。

配置图(点击看大图):

基础配置完,可以自己添加需要的包,推荐添加lrzsz、motion、bluez(若不需要蓝牙功能,尽量不要添加这个包,占空间大)。

lrzsz可以方便的在xshell中传输文件,文件直接拖拽到xshell中就可以传到板子上。

3.编译

执行:

make

buildroot编译时间较长,与添加包的有关系还有网络,耐心等待。

编译过程中若报错,一个是少库文件,这个可以直接把错误扔到百度,就会有解决办法,告诉你需要装哪些包;还有一种报错的可能是,内存超限了,可以把虚拟机重启下试试,编译过程会占用很大内存。

编译完生成的rootfs.tar压缩文件在output/images/下。

四.烧写

1.准备TF卡

  1. 准备一张8G及以上的TF卡,在Ubuntu的软件商店里搜索Gparted软件,下载安装。
  2. 插入TF卡,用Gparted软件删除TF卡的所有分区,并新建两个分区;
  3. 建立第一个分区,大小32M,格式为FAT16;
  4. 建立第二个分区,用尽剩余空间(默认即可),格式为ext4。

查看分区,及分配的名字,执行:

df -h

2.烧录

u-boot-sunxi-with-spl.binzImagesun8i-v3s-licheepi-zero-dock.dtb拷到同一级文件夹下。

在同一级文件夹下新建rootfs文件夹,将rootfs.tar解压到这个文件夹下。

mkdir rootfs
tar -xvf buildroot-2017.08/output/images/rootfs.tar -C rootfs/

先烧写uboot:

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8    #如果盘符是sdb,则可直接实用这条指令,不是的话将/dev/sdb 改为实际的即可。

zImage, sun8i-v3s-licheepi-zero-dock.dtb拷贝到第一个分区:

cp zImage /media/zhi/B783-EFB8/
cp sun8i-v3s-licheepi-zero-dock.dtb /media/zhi/B783-EFB8/

将文件系统拷贝到第二分区:

sudo cp -rf rootfs/* /media/zhi/d501f7a6-7e88-4f6a-9991-90484f477642/

全部拷贝完成后,将TF卡弹出,插到开发板上上电运行。

发表评论

电子邮件地址不会被公开。