我是靠谱客的博主 标致毛豆,最近开发中收集的这篇文章主要介绍BingPi V3s:一步一个脚印一、我的目标二、SD卡分区三、编译U-Boot四、编译Kernel五、编译Buildroot六、编译Qt,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述很精致小巧的一块板子,基于全志V3s芯片。

一、我的目标

名称描述链接
U-Boot使用Licheepi的Uboothttps://github.com/Lichee-Pi/u-boot/tree/v3s-current
Linux Kernel使用Licheepi的Linux Kernelhttps://github.com/Lichee-Pi/linux/tree/zero-5.2.y
Buildroot使用buildroot-2017.08.1https://buildroot.org/downloads/buildroot-2017.08.1.tar.bz2
Qt5自己交叉编译https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz

二、SD卡分区

嵌入式Linux–荔枝派Zero–V3s–SD卡启动

在这里插入图片描述

三个分区:

分区一分区二分区三
命名未格式化区域boot分区rootfs分区
格式无格式(裸数据)fat16ext4
大小1MB(视U-Boot大小而定)16MB(视Kernel、dtb文件大小而定)剩余的空间(视根文件系统大小而定)
用途存放U-Boot二进制执行文件存放Linux Kernel二进制文件、设备树文件存放用户空间根文件系统
烧录方式使用dd命令烧录U-Boot到SD卡:sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb1 bs=1024 seek=8
清除TF卡上的uboot区域(假设Uboot区域是1M):sudo dd if=/dev/zero of=/dev/sdb bs=1024 count=1024 seek=8
拷贝Kernel到分区:sudo cp zImage /media/liefyuan/BOOT/
拷贝设备树到分区:sudo cp sun8i-v3s-licheepi-zero.dtb /media/liefyuan/BOOT/
解压根文件系统压缩包到分区:sudo tar xvf rootfs.tar -C /media/liefyuan/rootfs/

烧录Uboot:

会跳过SD卡前8K的地址

总结:

Windows系统下使用软件SDFormatter进行快速格式化卡
Ubuntu系统下使用软件GParted进行分区

  • 卸载所有的现有分区
  • 删除所有分区,使其整张卡都是raw区域
  • 创建第一个区域boot,格式为fat16,大小一般预留个10MiB ~ 16MiB用来存放Kernel镜像和dtb,这个分区前需要预留一个1MiB~10MiB的无文件格式的区域(RAW区域)用来存放uboot
  • 创建第二个分区rootfs,格式ext4,大小就是剩余的所有空间,该分区前无需预留空间。

三、编译U-Boot

1、传给Kernel的参数

Uboot起来以后是需要给Kernel传一些启动参数的,比如:

  • 控制台输出终端(串口、屏幕或其他),如果是串口终端输出还要传波特率
  • 文件系统启动的分区/块
  • 内核打印信息等级
  • 等待时间
  • 启动init

目前有两种方法传参:

方法一:在Uboot命令行设置参数

Uboot上电后按回车进入命令行:配置env并设置bootarg和bootcmd参数变量最后保存env

  • 配置串口打印信息(可选一):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

解释:

设置bootargs参数:ttyS0代表串口输出终端(需要带波特率的值),tty0代表屏幕输出终端
设置bootcmd参数:就是从EMMC设备拷贝kernel文件(根据文件名)到DRAM的指定地址,并拷贝设备树文件(根据文件名)到DRAM的指定地址,然后再设置从DRAM启动Kernel的地址和设备树地址(和前面指定地址一致)。

方法二:使用boot.scr文件传参

参考我的这篇博客:全志V3s学习记录(5)uboot:传参(boot.scr)参数配置(script.bin)

在uboot环境变量里面需要设置内核和设备树的加载地址,使用boot.scr可以直接传递这些参数。

  • boot.scr是由boot.cmd使用mkimage工具生成的。
  • mkimage工具在uboot/tools文件夹下
  • boot.scr放在TF卡第一分区。

在uboot源码根目录下新建

vim boot.cmd

写入以下内容(普通配置,没有屏幕)

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb
bootz 0x41000000 - 0x41800000

或者带屏幕的分辨率为480x272 LCD的配置

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 earlyprintk rw
setenv video-mode sunxi:480x272-18@60,monitor=lcd
setenv lcd-mode 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
setenv stderr serial,lcd
setenv stdout serial,lcd
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb
bootz 0x41000000 - 0x41800000

又或者带屏幕的分辨率为800x480 LCD的配置

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 earlyprintk rw
setenv video-mode sunxi:800x480-18@60,monitor=lcd
setenv lcd-mode x:800,y:480,depth:18,pclk_khz:10000,le:42,ri:8,up:11,lo:4,hs:1,vs:1,sync:3,vmode:0
setenv stderr serial,lcd
setenv stdout serial,lcd
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb
bootz 0x41000000 - 0x41800000

使用mkimage工具

mkimage工具在/uboot/tools文件夹下

在uboot根目录下输入以下命令拷贝到用户文件夹下,方便以后可以直接使用

sudo cp ./tools/mkimage /usr/local/bin/mkimage

使用mkimage生成boot.scr

mkimage -C none -A arm -T script -d boot.cmd boot.scr

拷贝boot.scr到启动卡的第一分区(boot分区)

sudo cp boot.scr /media/liefyuan/BOOT/

2、编译U-Boot

2.1 编译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 烧录U-Boot

  • 使用dd命令将bin文件烧录到SD卡的开始位置(多运行几次!):sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

  • ubuntu环境下安全弹出SD卡:sync && eject /dev/sdb

    • /dev/sdb请替换为实际的TF卡设备文件名。
    • sync命令可以确保数据成功写到TF卡中,eject命令用于弹出TF卡。

四、编译Kernel

  • 清除:make clean

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

  • time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

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

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

加了time可以统计编译的时间

  • 拷贝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/

增加USB接口的WIFI模组RTL8188ETV

rtl8188eu 和 8188etv 使用相同的驱动,以下以 rtl8188eu 为例说明

在这里插入图片描述

在这里插入图片描述
Linux 内核配置里面使能编译成模块,编译后的.ko驱动文件在drivers/staging/rtl8188eu目录下:

  • 将r8188eu.ko驱动模块文件拷贝到根文件系统的/lib/moduel
  • 将WiFi固件rtl8723bs_nic.bin拷到根文件系统分区/lib/firmware/rtlwifi目录下

完整的记录参考这个:
嵌入式Linux:移植USB接口的RTL8188EUS、RTL8188ETV WIFI模块

需要适配

嵌入式Linux:mangopi-V3s适配
适配电容屏

注释NS2009(电阻屏触摸芯片)相关的设备树代码

目录:arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts

/*&i2c0 {
        status = "okay";

        ns2009: ns2009@48 {
                compatible = "nsiway,ns2009";
                reg = <0x48>;
        };
};*/

添加电容屏设备树

目录:arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts

&i2c0 {
        status = "okay";
        gt911: touchscreen@14 {
                compatible = "goodix,gt911";
                reg = <0x14>;
                interrupt-parent = <&pio>;
                interrupts = <1 3 IRQ_TYPE_EDGE_FALLING>; /* (PB3) */
                pinctrl-names = "default";
                irq-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; /* (PB3) */
                reset-gpios = <&pio 1 2 GPIO_ACTIVE_HIGH>; /* RST (PB2) */
                /* touchscreen-swapped-x-y */
        };
};

内核配置

  • 取消ns2009
  • 增加电容芯片GT911
make ARCH=arm menuconfig

在这里插入图片描述
上电之后需要运行一下tslib的校验才可以用触摸功能

五、编译Buildroot

参考这个:全志V3s学习记录(9)buildroot文件系统构建

六、编译Qt

参考:嵌入式Linux–交叉编译安装Qt5.9.1
参考:嵌入式Linux–交叉编译安装Qt5.12.9
参考:Mangopi MQ-R:T113-s3编译Tina Linux系统(三)独立编译Qt5

最后

以上就是标致毛豆为你收集整理的BingPi V3s:一步一个脚印一、我的目标二、SD卡分区三、编译U-Boot四、编译Kernel五、编译Buildroot六、编译Qt的全部内容,希望文章能够帮你解决BingPi V3s:一步一个脚印一、我的目标二、SD卡分区三、编译U-Boot四、编译Kernel五、编译Buildroot六、编译Qt所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(247)

评论列表共有 0 条评论

立即
投稿
返回
顶部