文章目录
一、前言
总结:玩了这么久,还是主线Linux好玩一点。
- 目前可以使用的lichee的u-boot就一个版本:
- 可以使用主线Linux有很多个版本:
- linux-zero-4.10.y:默认分支
- linux-zero-4.13.y:对网卡的支持更好
- linux-zero-4.13-exp:
- linux-zero-4.14.y:
- linux-zero-5.2.y:最新的内核
1.1 编译方法:
方法一:Makefile文件配置编译器和架构
内核根目录下的Makefile文件364行修改默认编译器,可以直接用make编译
# ARCH ?= $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
cd linux
make licheepi_zero_defconfig
make menuconfig #add bluethooth, etc.
make -j16
make -j16 INSTALL_MOD_PATH=out modules
make -j16 INSTALL_MOD_PATH=out modules_install
# 修改了设备树文件后编译
make dtbs
方法二:编译命令行中指定编译器和架构
-
清除:
make clean
-
make ARCH=arm licheepi_zero_defconfig
-
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
1.2 Boot分区文件
- boot.scr(主线llinux),参考:u-boot传参(boot.scr)和参数配置(script.bin)文件
- 设备树文件sun8i-v3s-licheepi-zero.dtb或者sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb等。
- 刚生成的zImage一起放到TF卡第一分区。
二、编译
2.1 制作SD卡
- Windows系统下使用软件
SDFormatter
进行快速格式化卡 - Ubuntu系统下使用软件
GParted
进行分区- 卸载所有的现有分区
- 删除所有分区,使其整张卡都是raw区域
- 创建第一个区域boot,格式为fat16,大小一般预留个10MiB ~ 16MiB用来存放Kernel镜像和dtb,这个分区前需要预留一个1MiB~10MiB的无文件格式的区域(RAW区域)用来存放uboot
- 创建第二个分区rootfs,格式ext4,大小就是剩余的所有空间,该分区前无需预留空间。
2.2 编译U-Boot
- 清除:
make clean
- 配置编译文件(我的屏幕是5寸):
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
- 编译:
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log
加了
time
可以统计编译的时间
2.2.1 烧录U-Boot
在制作SD卡的时候,BOOT分区前面需要空出一部分空间来存放Uboot(这部分没有文件系统格式是raw区域)。
-
使用dd命令将bin文件烧录到SD卡的开始位置(多运行几次!):
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdx bs=1024 seek=8
-
sync && eject /dev/sdx
-
/dev/sdx请替换为实际的TF卡设备文件名。
sync命令可以确保数据成功写到TF卡中,eject命令用于弹出TF卡。
注意:因为这个u-boot-sunxi-with-spl.bin文件比较大,所以在设置SD文件分区时需要在boot分区前预留至少3MiB的空间用来存放U-Boot文件。
2.3 编译Kernel
-
清除:
make clean
-
make ARCH=arm licheepi_zero_defconfig
-
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
加了
time
可以统计编译的时间
2.3.1 拷贝kernel和dtb文件到boot分区
- 拷贝kernel镜像文件到boot分区:
sudo cp arch/arm/boot/zImage /media/liefyuan/BOOT/
- 拷贝dtb文件到boot分区:
sudo cp arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb /media/liefyuan/BOOT/
2.4 编译文件系统
我有一个编译好的–祖传的纯净的文件系统,一直在用这个。
2.4.1 拷贝文件系统到rootfs分区
备份原有的SD卡里面的文件系统
- 进入SD卡文件系统分区的目录下(/media/liefyuan/rootfs)在目录下进行打包操作命令打包:
sudo tar -zcvf rootfs.tar.gz *
解压现有的文件系统压缩包到rootfs分区
- 将这个压缩包解压到指定的目录(解压到SD卡的文件系统分区):
sudo tar -zxvf rootfs.tar.gz -C /media/liefyuan/rootfs/
2.4.2 文件系统中添加Qt(图形化界面)
简单的介绍一下:图形化接口是一门大学问,要想使用Qt就得使用tslib。
- tslib库交叉编译参考:嵌入式Linux–tslib下载、编译、安装
- Qt源码交叉编译参考:嵌入式Linux–交叉编译安装Qt5.12.9
三、运行
3.1 Uboot上电后配置env
设置bootarg和bootcmd
在U-Boot命令行中设置:
-
配置串口打印信息:
setenv bootargs 'console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0'
-
配置屏幕显示和串口同时打印信息:
setenv bootargs 'console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0'
-
配置启动相关的一些信息:
setenv bootcmd '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;'
-
最后保护好参数:
saveenv
四、测试相关的
测试屏幕
cat /dev/fb0 > sreensnap
ls -l sreensnap -rw-r--r-- 1 wsw wsw 6291456 Jan 27 21:30 sreensnap
我们得到了一个恰好6M的文件,再做下面的操作:
代码:
clear /*清楚屏幕的输出*/
cat sreensnap > /dev/fb0
cat /dev/urandom > /dev/fb0
cat /dev/zero > /dev/fb0
使用第一条命令可以让屏幕出现雪花
使用第二条命令可以让屏幕变黑
说明屏幕移植成功