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
然后將分辨率改成你的實際分辨率

浙公網安備 33010602011771號