开发环境:Linux系统为Ubuntu 18.04.6 LTS,如在下面操作中提示部分环境/工具缺失未安装,请单独安装。
硬件基本介绍请参考第一篇文章:基于全志V3S的Linux开发板学习笔记01——简介
1. 环境准备
推荐直接下载完整资源包,减少网络环境操作与git下载的时间,文末直接下载或在下面步骤单独git:
1) GCC交叉编译器
GCC强烈推荐是gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf这个版本,不然在后续Uboot测试以太网时,ping操作会导致系统异常。
① 下载编译器资源
可以从文末平台获取的资源中找到gcc压缩文件拷贝到opt文件夹或者终端输入:
sudo wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/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
③ 添加交叉编译器环境
修改/etc/profile文件,新增添加的编译器环境:
sudo vim /etc/profile
在最后一行添加:
export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH
保存后执行下列命令生效:
source /etc/profile
重启控制台,运行下述命令检查编译器环境:
arm-linux-gnueabihf-gcc -v
2) 设备树编译器
输入命令:
sudo apt-get install device-tree-compiler
2. Uboot
1)下载
终端输入:
sudo git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental
解决过程1:如果在在git clone 时遇到fatal的443拒绝、The TLS Conn…或者相关问题,如下图,可尝试把https改为http方式:
解决过程2:或者产生尝试清空DNS缓存后重试,由于我这里使用的是windows跑的Linux虚拟机,清除缓存在windows的CMD控制台输入:ipconfig/flushdns
解决过程3:如果在git clone时遇到过早的文件结束符(EOF)问题,一个原因是由于文件过大,超出限制被可以尝试下面方法:
git config --global http.postBuffer 524288000
解决过程4:还有一个方法就是更换网络环境,可以尝试使用手机4G流量创建WIFI热点供电脑下载或者使用网络代理等方式,有时候手机热点的网络会顺利很多。
解决过程5:如果到这里还不行,还是直接文末拿资源文件夹里的文件吧
2)安装
根据自己的屏幕大小进行编译,终端输入:
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
#可选为LicheePi_Zero_800x480LCD_defconfig/LicheePi_Zero480x272LCD_defconfig/LicheePi_Zero_defconfig
3)配置
终端输入:
sudo make menuconfig
按键操作:回车\Y \N \M\
① 芯片配置
我们可以看到配置选择了sun8i (Allwinner V3s)
② Boot设置
这里可以看到CPU的时钟频率,另外的其他配置大家可以自行了解
③ 修改启动与日志输出方式
修改include/configs/sun8i.h :并使uboot从tf卡启动,并使lcd显示跟串口同时输出,终端输入:
sudo vim include/configs/sun8i.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=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0"
4)编译
终端输入:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make
这里可能会遇到权限问题,可以使用命令:
sudo chmod -R 777 u-boot
指定文件夹的最高最高权限,编译后会生成u-boot-sunxi-with-spl.bin文件
5)烧录
① 安装Gparted
这里使用了软件gparted,终端输入:
sudo apt-get install gparted
② SD卡分区
首先对卡进行格式化,然后删除当前分区:
新建Boot分区:
Boot分区大小设置为16M,fat16系统,名称为boot,注意预留“之前的空余空间”,用于Uboot烧录:
新建rootfs分区,用于主系统运行使用,我们把剩下的部分都分给rootfs区,注意系统与Boot分区不同,采用EXT4格式:
分区后的存储如下,然后我们点击对勾完成分区配置:
分区后的状态如下:
重新连接或插拔存储设备,可以看到如下分布:
③ 烧录Boot
Boot烧录到SD卡的8k偏移处:
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
6)运行
虽然我们还没有准备系统镜像,但可以先插入到开发板中运行一下Boot:
查看串口日志:
日志中可以看到Boot 2秒后进入主系统,只不过我们没有系统镜像和设备树文件,接下来我们开始主系统的配置。
3. Kernel
1)安装相关依赖
sudo apt install git wget make gcc flex bison libssl-dev bc kmod
2)下载内核源码
终端输入:
git clone -b zero-5.2.y --depth 1 https://github.com/Lichee-Pi/linux.git
3)配置编译器
修改makefile文件,终端输入:
vim Makefile
[364] ARCH = arm
[365] CROSS_COMPILE = arm-linux-gnueabihf-
[366] INSTALL_MOD_PATH = out
4)编译内核
终端输入:
make licheepi_zero_defconfig
make menuconfig
make -j16
make -j16 modules
sudo make -j16 modules_install
make dtbs #编译设备树
初次编译时间会比较长,请耐心等待
编译完成后,zImage在arch/arm/boot/下,驱动模块在out/lib下,设备树在arch/arm/boot/dts下,把zImage,sun8i-v3s-licheepi-zero-dock.dtb放到Boot中
Boot区内容如下:System xxx文件夹默认生成的,可以删除可以忽略
5)插卡运行
目前我们烧录了Uboot,放置了zImage内核映像和设备树文件,接下来插卡上电运行一下查看效果:
在这里插入图片描述
可以看到屏幕已经正常驱动显示,以及日志打印,由于没有根文件系统,现在系统还是无法跑起来,接下来准备根文件系统。
4. Buildroot
1)下载编译
安装相关依赖,终端输入:
apt-get install linux-headers-$(uname -r)
apt-get install libncurses5-dev
apt-get install wget
apt-get install gcc automake autoconf libtool make
下载资源,终端输入:
wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
解压资源,可以直接解压或终端输入:
tar xvf buildroot-2017.08.tar.gz
![[Pasted image 20241021192553.png]]
2)配置系统
终端输入:
make menuconfig
芯片选择V3S的配置,Target options:
3)配置交叉工具链
在构建u-boot时已经配置好外部工具链,所以下面的type选择外部,并修改为预装的配置,路径改为自己工具链的路径,需要根据自己的工具链版本进行选择,External toolchain C library还是选择传统的glibc,需要小体积可以选uclibc,然后勾选上C++的支持,最后配置如下:
4)配置系统参数
配置用户名、密码(后面会设置免密码登录,这里大家根据需要选择):
5) 编译
配置安装环境,终端输入:
sudo apt-get install g++ patch cpio python unzip rsync bc
编译,终端输入:
make
编译成功后,在output/images下会生成rootfs.tar
将文件解压并拷贝到rootfs分区中,如果文件无法移动,可以开启超级文件权限,终端输入:
sudo nautilus
为了方便我们免密码直接进入系统,需要编辑/etc/inittab,终端输入:
vi /etc/inittab
改为如下所示:
#console::respawn:/vi ASA/getty -L console 0 vt100 # GENERIC_SERIAL
console::respawn:-/bin/sh
然后我们插卡运行:
我们也可以在串口中输入ls命令遍历目录信息:
截止到这里,我们的系统基本制作完成了,接下来完成板子其他资源的验证。
如遇到部分资源git无法下载,可公众HAO【IOT趣制作】私信【1022】,直接下载GCC编译器、Linux镜像、Uboot、Buildroot资源文件。