00.全志H3系统开发,移植Linux系统+Qt5.9.5
本系统基于淘宝某H3开发板制作
下载开发板Linux源代码和其他代码
其中
- 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
然后将分辨率改成你的实际分辨率
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~