00.全志H3系统开发,移植Linux系统+Qt5.9.5

本系统基于淘宝某H3开发板制作

在这里插入图片描述

下载开发板Linux源代码和其他代码

H3资源

其中

  • H3-DVK-lichee-201809.tar 为Linux源码
  • gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar为交叉编译器
  • qt-everywhere-opensource-src-5.9.5.tar 为qt5.9.5源码
  • qt-creator-opensource-linux-x86_64-4.15.2 为 qtcreator 4.15.2 软件
  • SourceHanSansK-Normal 为需要使用的字体

编译Linux源码

首先解压H3-DVK-lichee-201809.tar到Ubuntu系统中

tar -xvf H3-DVK-lichee-201809.tar.gz 

得到lichee文件夹
在这里插入图片描述

由于我们需要移植qt5.9.5,Linux源码中的默认交叉编译器版本太低了,所有还需要替换成我们的
4.9.4的编译器,解压编译器源码替换lichee/brandy/gcc-linaro文件夹即可

在这里插入图片描述

进入lichee/linux-3.4,复制默认的配置项

cp h3_defconfig .config

然后

cd ..
./build.sh config
//依次选择 1   1   0   2
//如果提示usnwifi 选择y

等待配置成功后,即可编译源码

./build.sh  

//每次修改内核后使用该命令编译,千万不要使用 ./build.sh config,会覆盖之前的配置
//修改内核配置一定要使用 make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-命令
//否则会配置异常

编译成功后,可使用pack 打包

./build.sh pack

编译打包成功后,系统的镜像文件在lichee/tools/pack下面
利用该文件即可烧写使用

编译qt5.9.5源码

首先解压qt源码到ubuntu系统中

在这里插入图片描述
修改文件内容
qt-everywhere-opensource-src-5.9.5/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
指定编译器的路径,这里就使用刚刚复制到lichee源码中的编译器

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-gcc
QMAKE_CXX               = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-g++
QMAKE_LINK              = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-objcopy
QMAKE_NM                = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-nm -P
QMAKE_STRIP             = /home/lv/lichee/brandy/gcc-linaro/bin/arm-linux-gnueabi-strip
load(qt_config)

进入qt-everywhere-opensource-src-5.9.5目录创建一个config.sh配置文件
内容为

./configure  \
  -prefix /home/lv/system/Qt5.9.5 \
  -xplatform linux-arm-gnueabi-g++ \
  -confirm-license \
  -opensource \
  -release \
  -shared \
  -qt-zlib \
  -qt-freetype \
  -sql-sqlite \
  -qt-libjpeg \
  -no-qml-debug \
  -no-dbus \
  -no-gif \
  -no-iconv \
  -no-opengl \
  -no-cups \
  -no-glib \
  -no-dbus \
  -no-rpath \
  -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \
  -no-avx  \
  -no-openssl \
  -nomake tools \
  -qt-libpng \
  -no-tslib \
  -nomake examples 

修改为可执行权限

chmod 777 config.sh

执行配置

./config.sh

编译源码

make -j32

安装qt5.9.5,安装后文件就在/home/lv/system/Qt5.9.5中

make install

移植qt到H3文件系统

复制刚刚编译好的qt库 即 /home/lv/system/Qt5.9.5文件夹
将该文件夹整体复制到
lichee/buildroot/target/dragonboard/rootfs/opt/文件夹中

做些裁剪 删除 bin doc include mkspecs qml translations文件夹

删除lib中的 cmake pkgconfig *.a *.prl *.la

在lib文件夹中新建fonts文件夹
将字体SourceHanSansK-Normal.ttf 复制到该文件夹中

修改lichee/buildroot/target/dragonboard/extra/profile文件,添加全局变量

export LD_LIBRARY_PATH=/opt/Qt5.9.5/lib
export QT_QPA_FONTDIR=/opt/Qt5.9.5/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt5.9.5/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0

由于默认预留的根文件系统剩余容量太小,我们修改源码提升容量
修改lichee/buildroot/target/dragonboard/build.sh
中的97行
NEW_NR_SIZE= ( ( ( ( (((( ((((NR_SIZE+32)/16)*16))
改为
NEW_NR_SIZE= ( ( ( ( (((( ((((NR_SIZE+128)/16)*16))

修改lichee/tools/pack/common/partition/sys_partition_dragonboard.fex文件

[partition]
    name         = rootfs
    size         = 2097152
    downloadfile = "rootfs.fex"
	user_type    = 0x8000

修改完成后重新编译linux,打包系统

./build.sh
./build.sh pack

支持NFS

进入 lichee/linux-3.4

make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

File Systems->Network File Systems->NFS client support
勾选 NFS client support for NFS version 3
勾选 NFS client support for NFS version 4

重新编译lichee打包系统即可支持nfs

测试qt

我们编写一个qt程序,用nfs测试,发现会报下面的错误

./UI: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /opt/Qt5.9.5/lib/libQt5Core.so.5)
./UI: /lib/libc.so.6: version `GLIBC_2.17' not found (required by /opt/Qt5.9.5/lib/libQt5Core.so.5)

这是由于我们更换了更高版本的编译器编译的系统和qt,所有之前的库文件就不支持了
我们将新的编译器中的库文件全部复制到系统中

我比较粗暴,直接把编译器内的库全部复制过来替换,后面在裁剪

HDMI

后面你会发现一个无情的问题,就是HDMI输出的是固定的720P50Hz。

当你修改fex文件中的分辨率后,屏幕异常模糊

主要的原因是系统分辨率确实修改成功了。但是HDMI却没有识别,就造成了这样的现象。

于是我们还要修改两个地方:
hdmi_mode改为10 对应 1080P60HZ

[boot_disp]
advert_disp     = 1
auto_hpd        = 1
output_type     = 4
hdmi_channel    = 0
hdmi_mode       = 10
cvbs_channel    = 1
cvbs_mode       = 11
output_full     = 1
hdmi_mode_check = 1

然后将分辨率改成你的实际分辨率

posted @ 2022-05-08 20:08  大高玩子  阅读(1323)  评论(1编辑  收藏  举报