很精致小巧的一块板子,基于全志V3s芯片。

一、我的目标

名称 描述 链接
U-Boot 使用Licheepi的Uboot https://github.com/Lichee-Pi/u-boot/tree/v3s-current
Linux Kernel 使用Licheepi的Linux Kernel https://github.com/Lichee-Pi/linux/tree/zero-5.2.y
Buildroot 使用buildroot-2017.08.1 https://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分区
格式 无格式(裸数据) fat16 ext4
大小 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:一步一个脚印相关推荐

  1. 一步一个脚印学习WCF系列之WCF概要—生成元数据与代理(五)

    阅读目录 一:契约与元数据 二:服务描述与元数据 一:契约与元数据 . 客户端与服务端之间共享的应该是Contract契约而不是代码,就是前面我们讲的文章"一步一个脚印学习WCF之WCF概要 ...

  2. 建模学习是个持之以恒的过程,一步一个脚印,才能真正的学到知识

    学习都是有一个过程的,不管是学习什么内容,都是有好奇时期-兴趣大-认真学习-遇到阻力沮丧-回头细想理性对待.(1)要根据自己的特长去决定自己学习MAX和应用MAX的目标.譬如,你的主业是建筑行业,熟悉 ...

  3. 一步一个脚印,QAD助力CAPP走出信息化进阶之路

    [本文转载于e-works数字化企业网] 客户引言: "随着汽车市场进入拐点,整个行业尤其是零部件厂商无可避免的将从管理入手进行转型升级.QAD ERP解决方案在汽车行业拥有"专业 ...

  4. 勤劳的人,一步一个脚印,加油

    今天一个粉丝后台私聊我,感触挺深的,把内容整理成文章,希望你以后越走越好,加油! 这个月我的主业和副业收入大概在4.5 万,这是我来到杭州后三年第一次一个月赚这么多钱,我记得刚来杭州的时候月薪是3 K ...

  5. 【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet的使用

    最近工作上效率比较低,各种需求更改耗费了大量的时间成本(不吐槽,你懂的,已无力),高的身心俱疲.... ... 每次废话都比较多,我也是服了自己了,就当我是来凑字数的吧!不废话了,开始正题: 翻了一下 ...

  6. 【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-2)Servlet的使用

    在上一篇 [一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet 的使用 中我们只是简单的对 Servlet 要做的任务.在服务器中的地位有了一个大概的了解,完成了在 ...

  7. 一步一个脚印,其实真的不慌

    怎么总是有时候,会犯一个错误,就是有点急于求成,会不惜代价的去完成本应该是水到渠成的事情. 还是心急了,,,,不光是学习,有偶尔生活也是这样的. 在这里记一下: 一步一步来,按照自己的节奏来,要掌握好 ...

  8. 单点突破,一步一个脚印

      项目上问题很多,从需求.设计.编码.测试.验收,流程上的每一步都不尽完善.各个模块从组长到组员,也都有很多提升空间.   现状如此,急也急不来,只能是一个长期的过程.眉毛胡子一把抓,没法聚焦,反而 ...

  9. java的栈堆的理解_理解堆与栈 - 一步一个脚印 - BlogJava

    一.引言: 一直不太明白堆与栈到底是什么,是指一块内存区呢,还是指一种数据结构?编写程序中总提到内存分配的栈与堆的区别,静态与动态分配等,总也弄不明白,隐约知道一点,但总分不清堆与栈到底是一块内存区还 ...

最新文章

  1. MSMQ 远程计算机不可用 remotemachinenotavailable
  2. C# 中对COOKIES的操作
  3. 数组拷贝问题,实际上是指针指向发生变化
  4. 最大子段和问题Java实现
  5. centos卸载内核_CentOS 中内核模块的加载和卸载
  6. 【译】C#9的候选功能
  7. Spring MVC和Thymeleaf:如何从模板访问数据
  8. mysql8和5.7区别_mysql8.0与mysql5.7安全加密小差别
  9. 【NLP】Stanford
  10. [Common 17-39] ‘connect_bd_intf_net‘ failed due to earlier errors. 的解决办法
  11. MFC(VS2010)编程实例之一(Edit Control控件)
  12. Linux 文件类型!
  13. css3 animation 位置移动了怎么不占位置_手把手整理CSS3知识汇总【思维导图】
  14. 小米 note3 android,小米Note3将更新MIUI10:基于安卓8.1 速度提升明显手感更加丝滑...
  15. 树形控件之思维导图 Android
  16. 物体识别基本原理及其Python实现
  17. ssb的matlab仿真,线性调制AM、DSB、SSB的MATLAB仿真代码
  18. 数学:定积分和数列和互相转化
  19. 【Activity学习五】--基于SSM整合Activiti之请假流程实现(二)
  20. 狼行千里吃肉,马行千里吃草(我读了5遍,震撼了!)

热门文章

  1. mysql日期从小到大排序,简述5种MySQL数据排序
  2. 这32件小事儿,对考研上岸真的有帮助
  3. 要不是和阿里P6聊过,到死也不知道自己原来啥也不是
  4. pig加载两个不同字段个数的文件?load file with different items(f1有42列,f2有43列读到一个对象中)
  5. 汽车钣金模具设计规范
  6. 回归本源,勿忘初心,趋势与未来洞察
  7. Word入门动画教程5:制作稿纸(转)
  8. 房地产装饰行业ERP工程项目实施要点分析
  9. 张生尧:5.17黄金最新走势分析,黄金涨跌精准操作策略
  10. python手机自动化截图_Python Appium自动化测试 屏幕截图