“Buildroot 系统使用”的版本间的差异
Tangdapeng(讨论 | 贡献) |
Sunxiaolin(讨论 | 贡献) |
||
(未显示2个用户的12个中间版本) | |||
第1行: | 第1行: | ||
该buildroot系统是基于wayland显示协议的嵌入式系统。系统集成的qt支持wayland、wayland-egl、eglfs、linuxfb显示插件。 | 该buildroot系统是基于wayland显示协议的嵌入式系统。系统集成的qt支持wayland、wayland-egl、eglfs、linuxfb显示插件。 | ||
+ | ==基础信息== | ||
+ | ===用户密码=== | ||
+ | 系统默认使用root用户登录,并支持root用户ssh远程登录,给目标系统root用户设置密码为root<br /> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ passwd root | ||
+ | > root | ||
+ | > root | ||
+ | </syntaxhighlight> | ||
+ | ===系统设置=== | ||
+ | 系统使用基于[https://wayland.freedesktop.org/ wayland]协议的[https://github.com/wayland-project/weston weston]软件来作为显示后端,开机启动脚本为/etc/init.d/S50launcher,脚本中启动了weston软件后又启动了/usr/bin/QLauncher程序,可将该程序替换为其他Qt程序。weston的配置文件为[https://jlk.fjfi.cvut.cz/arch/manpages/man/weston.ini.5 /etc/xdg/weston/weston.ini]。常用设置参考如下: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [shell] | ||
+ | panel-position=none | ||
+ | # 取消桌面顶部的任务栏 | ||
+ | background-image=/usr/lib/qt/examples/wayland/multi-output/images/background.jpg | ||
+ | # 更换背景图片 | ||
+ | background-color=0xFF000000 | ||
+ | # 使用颜色参数将桌面背景设置为全黑 | ||
+ | [launcher] | ||
+ | icon=/usr/share/weston/terminal.png | ||
+ | path=/usr/bin/weston-terminal | ||
+ | # 在桌面顶部的任务栏中添加程序启动图标 | ||
+ | [output] | ||
+ | name=HDMI-A-1 | ||
+ | mode=1920x1080@60.0 | ||
+ | transform=90 | ||
+ | # 将桌面旋转90度 | ||
+ | # 参数可从启动weston时的打印查看到 | ||
+ | </syntaxhighlight> | ||
+ | 重启脚本命令: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ /etc/init.d/S50launcher stop | ||
+ | $ /etc/init.d/S50launcher start | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==使用示例== | ||
+ | ===网络设置=== | ||
+ | 系统下有ifupdown和[https://wiki.archlinux.org/index.php/Dhcpcd dhcpcd]两套软件可用来管理网络,开机启动脚本分别为/etc/init.d/S40network和/etc/init.d/S41dhcpcd,ifupdown的配置文件为/etc/network/interfaces,dhcpcd的配置文件为/etc/dhcpcd.conf。dhcpcd功能更丰富,建议使用dhcpcd配置网络。dhcpcd默认会对所有可用网络接口配置动态IP | ||
+ | *使用dhcpcd设置网络 | ||
+ | 设置静态IP,编辑/etc/dhcpcd.conf,添加内容参考如下: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | interface eth0 | ||
+ | static ip_address=192.168.0.10/24 | ||
+ | static routers=192.168.0.1 | ||
+ | static domain_name_servers=1.2.4.8 114.114.114.114 | ||
+ | </syntaxhighlight> | ||
+ | 调整网络优先级,编辑/etc/dhcpcd.conf,添加内容参考如下: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | interface eth0 | ||
+ | metric 200 | ||
+ | interface wlan0 | ||
+ | metric 300 | ||
+ | interface usb0 | ||
+ | metric 400 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *连接wifi | ||
+ | 系统下使用[https://wiki.archlinux.org/index.php/Wpa_supplicant wpa_supplicant]软件连接wifi,开机启动脚本为/etc/init.d/S80wifireconnect,配置文件为/userdata/cfg/wpa_supplicant.conf,系统中提供了wifi_start.sh脚本用于输入wifi账号密码并进行连接,并借助系统下的dhcpcd服务配置了动态IP,参考命令如下: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ wifi_start.sh norco_2.4G norco85258506 | ||
+ | # 账号:norco_2.4G | ||
+ | # 密码:norco85258506 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *4G模块上网 | ||
+ | 系统默认支持EC20 4G模块,插上4G模块、插上SIM卡、接上天线即可。系统下使用/etc/norco/init.d/ec20.sh脚本拨号上网,动态获取IP,无需要手动操作 | ||
+ | |||
+ | *使用ifupdown设置网络 | ||
+ | 设置静态IP,编辑/etc/network/interfaces,参考设置如下:<br /> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.0.10 | ||
+ | gateway 192.168.0.1 | ||
+ | netmask 255.255.255.0 | ||
+ | broadcast 192.168.0.255 | ||
+ | dns-nameservers 1.2.4.8 114.114.114.114 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *常用调试命令 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ ip link set wlan0 up | ||
+ | # 使能wlan0接口 | ||
+ | $ iw dev wlan0 scan | grep SSID | ||
+ | # 使用iw命令搜索wifi | ||
+ | $ iwlist wlan0 scan | grep SSID | ||
+ | # 使用iwlist命令搜索wifi | ||
+ | $ cp /etc/wpa_supplicant.conf ./1.conf | ||
+ | $ wpa_passphrase norco_2.4G norco85258506 >> ./1.conf | ||
+ | # 将wifi账号和密码保存到配置文件 | ||
+ | $ wpa_cli -i wlan0 disconnect | ||
+ | # 关闭已有的wifi连接 | ||
+ | $ killall wpa_supplicant | ||
+ | # 杀死已启动的wpa_supplicant进程 | ||
+ | $ wpa_supplicant -B -i wlan0 -c ./1.conf | ||
+ | # 后台运行wpa_supplicant程序,尝试根据配置文件信息连接wifi | ||
+ | $ wpa_cli -i wlan0 scan | ||
+ | # 使用wpa_cli命令扫描wifi | ||
+ | # 先运行wpa_supplicant程序,才可以使用wpa_cli命令 | ||
+ | $ wpa_cli -i wlan0 scan_result | ||
+ | # 使用wpa_cli命令查看扫描到的wifi | ||
+ | $ ip addr add 192.168.1.3/24 brd + dev wlan0 | ||
+ | # 设置静态IP | ||
+ | $ ip route add default via 192.168.1.1 dev wlan0 | ||
+ | # 添加网关 | ||
+ | $ ip route delete default via 192.168.1.1 | ||
+ | # 删除网关 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{模板:RKExportPackFirmware}} | ||
+ | |||
+ | ==开发环境== | ||
+ | |||
+ | {{模板:Ubuntu主机开发环境搭建}} | ||
+ | |||
+ | ==QT开发== | ||
===搭建qt开发环境=== | ===搭建qt开发环境=== | ||
− | + | x86主机或虚拟机的系统用Ubuntu16.0或Ubuntu18.04进行交叉编译开发,开发环境配置参考如下:<br /> | |
+ | Ubuntu16.04系统主机编译环境建议安装 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo liblz4-tool genext2fs expect patchelf gawk | ||
+ | </syntaxhighlight> | ||
+ | Ubuntu18.04系统主机编译环境建议安装 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo apt-get install asciidoc autoconf autotools-dev bash bc binfmt-support binutils bison build-essential bzip2 chrpath cmake cpio curl cvs dblatex device-tree-compiler diffstat expect fakeroot file flex g++ gawk gcc genext2fs git git-gui gitk g++-multilib graphviz gzip intltool libdrm-dev libglade2-dev libglib2.0-dev libgtk2.0-dev liblz4-tool libncurses5 libqt4-dev libsigsegv2 libssl-dev libudev-dev libusb-1.0-0-dev linaro-image-tools live-build m4 make mercurial mtools ncurses-dev openssh-client parted patch patchelf perl python python-linaro-image-tools python-matplotlib python-pip qemu-user-static repo rsync sed ssh subversion tar texinfo u-boot-tools unzip w3m wget libdb1-compat python3-pyelftools | ||
+ | </syntaxhighlight> | ||
+ | 主机PC端环境以Ubuntu16.04为例,目标板系统为buildroot嵌入式系统,默认使用root用户登录,并支持root用户ssh远程登录,给目标系统root用户配置密码为root<br /> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ passwd root | $ passwd root | ||
第7行: | 第132行: | ||
> root | > root | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | SDK与系统镜像一同发布,从相应的烧录包中获取SDK。SDK中包含交叉编译工具链、qmake、与目标板系统的rootfs。解压SDK到任意目录$TOP_DIR(示例中以路径/home/lin/trash为例),并运行开发环境配置脚本<br /> | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ tar host.tar.gz -C $TOP_DIR | $ tar host.tar.gz -C $TOP_DIR | ||
第76行: | 第201行: | ||
<br /> | <br /> | ||
'''添加Kits'''<br /> | '''添加Kits'''<br /> | ||
− | Tools --> Options --> Build & Run --> Kits | + | Tools --> Options --> Build & Run --> Kits --> Add --> Apply<br /> |
[[文件:Qtcreator1 Kits.png]]<br /> | [[文件:Qtcreator1 Kits.png]]<br /> | ||
<br /> | <br /> | ||
第109行: | 第234行: | ||
[[文件:Projects 6.jpg|1560px]]<br /> | [[文件:Projects 6.jpg|1560px]]<br /> | ||
<br /> | <br /> | ||
+ | ===打印机的使用=== | ||
+ | 系统已集成惠普USB打印机的支持,能够正常打印txt、pdf、图片等格式文件,能够在qt应用程序中直接打印,下面以打惠普印机(型号:HP LaserJet Professional P1108)进行说明: | ||
+ | * 插上打印机,查找打印机设备及打印机驱动 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ lpinfo -v | ||
+ | 输出: direct hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q87E8S9PR1a | ||
+ | $ lpinfo -m | grep 1108 | ||
+ | 输出: drv:///hp/hpcups.drv/hp-laserjet_professional_p1108.ppd | ||
+ | </syntaxhighlight> | ||
+ | * 添加默认打印机 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ lpadmin -p MyPrinter -E -v hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q87E8S9PR1a -m drv:///hp/hpcups.drv/hp-laserjet_professional_p1108.ppd | ||
+ | $ lpadmin -d MyPrinter | ||
+ | </syntaxhighlight> | ||
+ | * 打印测试 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ dmesg | tail | lp | ||
+ | </syntaxhighlight> | ||
+ | * qt应用程序打印测试 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ qt_printer_table | ||
+ | </syntaxhighlight> | ||
<br /> | <br /> |
2023年2月10日 (五) 16:26的最新版本
该buildroot系统是基于wayland显示协议的嵌入式系统。系统集成的qt支持wayland、wayland-egl、eglfs、linuxfb显示插件。
目录
基础信息
用户密码
系统默认使用root用户登录,并支持root用户ssh远程登录,给目标系统root用户设置密码为root
$ passwd root
> root
> root
系统设置
系统使用基于wayland协议的weston软件来作为显示后端,开机启动脚本为/etc/init.d/S50launcher,脚本中启动了weston软件后又启动了/usr/bin/QLauncher程序,可将该程序替换为其他Qt程序。weston的配置文件为/etc/xdg/weston/weston.ini。常用设置参考如下:
[shell]
panel-position=none
# 取消桌面顶部的任务栏
background-image=/usr/lib/qt/examples/wayland/multi-output/images/background.jpg
# 更换背景图片
background-color=0xFF000000
# 使用颜色参数将桌面背景设置为全黑
[launcher]
icon=/usr/share/weston/terminal.png
path=/usr/bin/weston-terminal
# 在桌面顶部的任务栏中添加程序启动图标
[output]
name=HDMI-A-1
mode=1920x1080@60.0
transform=90
# 将桌面旋转90度
# 参数可从启动weston时的打印查看到
重启脚本命令:
$ /etc/init.d/S50launcher stop
$ /etc/init.d/S50launcher start
使用示例
网络设置
系统下有ifupdown和dhcpcd两套软件可用来管理网络,开机启动脚本分别为/etc/init.d/S40network和/etc/init.d/S41dhcpcd,ifupdown的配置文件为/etc/network/interfaces,dhcpcd的配置文件为/etc/dhcpcd.conf。dhcpcd功能更丰富,建议使用dhcpcd配置网络。dhcpcd默认会对所有可用网络接口配置动态IP
- 使用dhcpcd设置网络
设置静态IP,编辑/etc/dhcpcd.conf,添加内容参考如下:
interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=1.2.4.8 114.114.114.114
调整网络优先级,编辑/etc/dhcpcd.conf,添加内容参考如下:
interface eth0
metric 200
interface wlan0
metric 300
interface usb0
metric 400
- 连接wifi
系统下使用wpa_supplicant软件连接wifi,开机启动脚本为/etc/init.d/S80wifireconnect,配置文件为/userdata/cfg/wpa_supplicant.conf,系统中提供了wifi_start.sh脚本用于输入wifi账号密码并进行连接,并借助系统下的dhcpcd服务配置了动态IP,参考命令如下:
$ wifi_start.sh norco_2.4G norco85258506
# 账号:norco_2.4G
# 密码:norco85258506
- 4G模块上网
系统默认支持EC20 4G模块,插上4G模块、插上SIM卡、接上天线即可。系统下使用/etc/norco/init.d/ec20.sh脚本拨号上网,动态获取IP,无需要手动操作
- 使用ifupdown设置网络
设置静态IP,编辑/etc/network/interfaces,参考设置如下:
auto eth0
iface eth0 inet static
address 192.168.0.10
gateway 192.168.0.1
netmask 255.255.255.0
broadcast 192.168.0.255
dns-nameservers 1.2.4.8 114.114.114.114
- 常用调试命令
$ ip link set wlan0 up
# 使能wlan0接口
$ iw dev wlan0 scan | grep SSID
# 使用iw命令搜索wifi
$ iwlist wlan0 scan | grep SSID
# 使用iwlist命令搜索wifi
$ cp /etc/wpa_supplicant.conf ./1.conf
$ wpa_passphrase norco_2.4G norco85258506 >> ./1.conf
# 将wifi账号和密码保存到配置文件
$ wpa_cli -i wlan0 disconnect
# 关闭已有的wifi连接
$ killall wpa_supplicant
# 杀死已启动的wpa_supplicant进程
$ wpa_supplicant -B -i wlan0 -c ./1.conf
# 后台运行wpa_supplicant程序,尝试根据配置文件信息连接wifi
$ wpa_cli -i wlan0 scan
# 使用wpa_cli命令扫描wifi
# 先运行wpa_supplicant程序,才可以使用wpa_cli命令
$ wpa_cli -i wlan0 scan_result
# 使用wpa_cli命令查看扫描到的wifi
$ ip addr add 192.168.1.3/24 brd + dev wlan0
# 设置静态IP
$ ip route add default via 192.168.1.1 dev wlan0
# 添加网关
$ ip route delete default via 192.168.1.1
# 删除网关
导出主板上的根文件系统分区镜像rootfs.img
1. 将U盘的第一个分区格式化成ext4格式
2. 在U盘的第一个分区根目录下创建export_rootfs文件
3. 将U盘插到主板上,重新给主板上电
4. 等待rootfs.img自动导出,此时系统会进入recovery模式,不会进入正常系统界面。导出完成后,系统会自动重启进入正常系统界面
5. U盘中的rootfs.img即为根文件系统分区镜像
在Windows电脑主机上制作完整固件
1. 解包完整固件update.img
- 将下载的烧录包解压到当前文件夹,进入tools目录,将烧录工具windows.zip解压到当前文件夹,进入windows\RKDevTool\rockdev目录,双击执行nc-unpack.bat解包脚本,等待解包完成后各分区镜像保存在Output\Image目录中
2. 替换根文件系统分区镜像rootfs.img
- 将导出的根文件系统分区镜像rootfs.img拷贝替换到Output\Image目录中
3. 打包完整固件update.img
- 双击执行nc-pack.bat打包脚本,等待打包完成后完整固件update.img保存在Output目录中
在Windows电脑主机上烧录固件
安装驱动
将下载的烧录包解压到当前文件夹,进入tools目录,将烧录工具windows.zip解压到当前文件夹,进入windows目录,将驱动DriverAssitant_v*.zip解压到当前文件夹,进入DriverAssitant_v*目录,双击DriverInstall.exe安装驱动。
运行烧录工具
进入tools\windows\RKDevTool\RKDevTool_Release目录,双击RKDevTool.exe运行烧录工具。
连接烧录线
将主板和Windows电脑通过一根USB烧录线进行连接。
让主板进入烧录模式
在主板系统终端下执行命令:
reboot loader
主板会被烧录工具识别成一个LOADER设备或MASKROM设备。
烧录完整固件update.img
点击“升级固件” --> 点击“固件”并选中完整固件update.img --> 点击“升级”
烧录完成后,设备自动重启进入正常工作模式。
单独烧录内核分区镜像boot.img
在设备处于LOADER模式下,可以单独烧录boot分区镜像或rootfs等其他分区镜像,点击“设备分区表”可以看到设备的分区信息。
只勾选boot一栏 --> 确认地址与设备分区地址一致 --> 选中boot.img所在路径 --> 点击“执行”
烧录完成后,设备会自动重启或需手动断电重启,进入正常工作模式。
在Linux下打包完整固件
unpack.sh用于将完整固件解包成各个分区镜像;打包工具脚本mkupdate.sh用于将各分区镜像打包成一个完整的固件。
- 将烧录、解包、打包工具linux.tar.gz解压到当前目录
tar xvf linux.tar.gz
- 解包update.img
cd linux/Linux_Pack_Firmware/rockdev
ln -sfr ../../../../update.img update.img
./unpack.sh
- 根据需要替换指定分区镜像,比如替换根文件系统分区镜像output/Image/rootfs.img
- 进行必要的移动拷贝,使用初始固件的分区参数、各分区镜像、打包配置文件
mv output/parameter.txt output/Image/
mv output/MiniLoaderAll.bin output/Image/
mv output/package-file .
ln -sfr output/Image/ Image
- 根据芯片平台执行对应的打包脚本,完成后完整固件update.img保存在当前目录
./rk3399-mkupdate.sh
在Linux下烧录固件
烧录工具upgrade_tool可用于升级固件。
- 连接好USB烧录线连接后,在主板的系统终端下执行如下命令,让主板进入烧录模式
reboot loader
- 将烧录、解包、打包工具linux.tar.gz解压到当前目录,并进行简单设置
tar xvf linux.tar.gz
cd linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool && chmod a+x upgrade_tool && sudo cp upgrade_tool /usr/local/bin
mkdir ~/.config/upgrade_tool/
cp config.ini ~/.config/upgrade_tool/
- 烧录完整固件及各分区镜像的命令
sudo upgrade_tool uf update.img
# 烧录完整固件
sudo upgrade_tool di -p parameter.txt
# 烧录分区参数
sudo upgrade_tool di -uboot uboot.img
# 烧录uboot分区镜像
sudo upgrade_tool di -b boot.img
# 烧录内核分区镜像
sudo upgrade_tool di -rootfs rootfs.img
# 烧录根文件系统分区镜像rootfs.img
sudo upgrade_tool di -r recovery.img
# 烧录recovery镜像
sudo upgrade_tool di -userdata userdata.img
# 烧录userdata分区镜像
开发环境
Ubuntu主机开发环境搭建
x86电脑主机或虚拟机的系统可使用Ubuntu 16.04、Ubuntu 18.04或Ubuntu 20.04进行开发。
Ubuntu 16.04建议安装:
sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo liblz4-tool genext2fs expect patchelf gawk
Ubuntu 18.04建议安装:
sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm rsync curl asciidoc autoconf autotools-dev bash bc binfmt-support binutils bison build-essential bzip2 chrpath cmake cpio curl cvs dblatex device-tree-compiler diffstat expect fakeroot file flex g++ gawk gcc genext2fs git git-gui gitk g++-multilib graphviz gzip intltool libdrm-dev libglade2-dev libglib2.0-dev libgtk2.0-dev liblz4-tool libncurses5 libqt4-dev libsigsegv2 libudev-dev libusb-1.0-0-dev linaro-image-tools live-build m4 make mercurial mtools ncurses-dev openssh-client parted patch patchelf perl python python-linaro-image-tools python-matplotlib python-pip qemu-user-static repo rsync sed ssh subversion tar texinfo u-boot-tools unzip w3m wget libdb1-compat python3-pyelftools screen git-lfs npm default-jre default-jdk ccache
Ubuntu 20.04建议安装:
sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm rsync curl asciidoc autoconf autotools-dev bash bc binfmt-support binutils bison build-essential bzip2 chrpath cmake cpio curl cvs dblatex device-tree-compiler diffstat expect fakeroot file flex g++ gawk gcc genext2fs git git-gui gitk g++-multilib graphviz gzip intltool libdrm-dev libglade2-dev libglib2.0-dev libgtk2.0-dev liblz4-tool libncurses5 libsigsegv2 libudev-dev libusb-1.0-0-dev live-build m4 make mercurial mtools ncurses-dev openssh-client parted patch patchelf perl python qemu-user-static rsync sed ssh subversion tar texinfo u-boot-tools unzip w3m wget libdb1-compat python3-pyelftools screen git-lfs npm default-jre default-jdk ccache
QT开发
搭建qt开发环境
x86主机或虚拟机的系统用Ubuntu16.0或Ubuntu18.04进行交叉编译开发,开发环境配置参考如下:
Ubuntu16.04系统主机编译环境建议安装
sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo liblz4-tool genext2fs expect patchelf gawk
Ubuntu18.04系统主机编译环境建议安装
sudo apt-get install asciidoc autoconf autotools-dev bash bc binfmt-support binutils bison build-essential bzip2 chrpath cmake cpio curl cvs dblatex device-tree-compiler diffstat expect fakeroot file flex g++ gawk gcc genext2fs git git-gui gitk g++-multilib graphviz gzip intltool libdrm-dev libglade2-dev libglib2.0-dev libgtk2.0-dev liblz4-tool libncurses5 libqt4-dev libsigsegv2 libssl-dev libudev-dev libusb-1.0-0-dev linaro-image-tools live-build m4 make mercurial mtools ncurses-dev openssh-client parted patch patchelf perl python python-linaro-image-tools python-matplotlib python-pip qemu-user-static repo rsync sed ssh subversion tar texinfo u-boot-tools unzip w3m wget libdb1-compat python3-pyelftools
主机PC端环境以Ubuntu16.04为例,目标板系统为buildroot嵌入式系统,默认使用root用户登录,并支持root用户ssh远程登录,给目标系统root用户配置密码为root
$ passwd root
> root
> root
SDK与系统镜像一同发布,从相应的烧录包中获取SDK。SDK中包含交叉编译工具链、qmake、与目标板系统的rootfs。解压SDK到任意目录$TOP_DIR(示例中以路径/home/lin/trash为例),并运行开发环境配置脚本
$ tar host.tar.gz -C $TOP_DIR
$ cd $TOP_DIR/host
$ ./relocate-sdk.sh
使用终端命令行编译运行qt程序
qt程序使用SDK中的qt5 examples例程,通过qmake、make命令进行编译
$ export PATH=$TOP_DIR/host/bin:$PATH
$ cd $TOP_DIR/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/qt/examples/opengl/hellowindow
$ qmake
$ make
生成hellowindow程序,可通过scp拷贝到目标板中直接运行
$ scp hellowindow root@10.168.1.247:
$ ssh root@10.168.1.247
$ ./hellowindow
系统在/etc/init.d/S50launcher开机启动服务中,启动了wayland显示服务,并运行了QLauncher桌面,若使用eglfs或linuxfb显示插件,则需要移除S50launcher服务
$ mv /etc/init.d/S50launcher ~
$ sync
$ reboot
指定eglfs显示插件运行程序
$ ./hellowindow -platform eglfs
$ ./calculator -platform linuxfb
使用qtcreator开发调试qt程序
qtcreator集成编辑、编译、运行、调试环境于一体,提升开发效率
安装qtcreator
$ sudo apt-get install qtcreator
添加Qt Versions
Tools --> Options --> Build & Run --> Qt Versions --> Add --> 选中qmake路径 --> Apply
添加Compilers
Tools --> Options --> Build & Run --> Compilers --> Add --> GCC -- 选中g++路径 --> Apply
注意:选中g++路径,并修改ABI一栏明确指示平台架构为arm
添加Debuggers(可选项)
Tools --> Options --> Build & Run --> Debuggers --> Add --> 选中gdb路径 --> Apply
添加Devices(可选项)
Tools --> Options --> Devices --> Add --> General Linux Device --> start Wizard
并点击"Test"测试设备联通
添加Kits
Tools --> Options --> Build & Run --> Kits --> Add --> Apply
打开 hellowindow 工程并选择Kits
Welcome --> Open Porject --> 选择工程路径 /home/lin/trash/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/qt/examples/opengl/hellowindow/hellowindow.pro --> Configure Project
编译运行 hellowindow
Build --> Build Project "hellowindow" --> 重启qtcreator --> Build --> Run
配置debug模式
Projects --> buildroot-kit --> Build
注意:找到 Build Steps --> qmake --> Details --> Additional arguments --> 添加 QMAKE_CXXFLAGS+=-g
Projects --> buildroot-kit --> Run
注意:找到 Run Environment --> Details --> 点击 Fetch Device Environment
重新编译并调试运行
Build --> Clean Project "hellowindow"
Debug --> Start Debugging --> Start Debugging
打印机的使用
系统已集成惠普USB打印机的支持,能够正常打印txt、pdf、图片等格式文件,能够在qt应用程序中直接打印,下面以打惠普印机(型号:HP LaserJet Professional P1108)进行说明:
- 插上打印机,查找打印机设备及打印机驱动
$ lpinfo -v
输出: direct hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q87E8S9PR1a
$ lpinfo -m | grep 1108
输出: drv:///hp/hpcups.drv/hp-laserjet_professional_p1108.ppd
- 添加默认打印机
$ lpadmin -p MyPrinter -E -v hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q87E8S9PR1a -m drv:///hp/hpcups.drv/hp-laserjet_professional_p1108.ppd
$ lpadmin -d MyPrinter
- 打印测试
$ dmesg | tail | lp
- qt应用程序打印测试
$ qt_printer_table