100ASK-IMX6ULL开发板_QT移植全过程_make 100ask_imx6ull-qt_defconfig

在这里插入图片描述

注意:选用新增的QT编译器选项生成的可执行文件(文件位于工程目录下build-xxx-xxx_toolchain-Debug文件中)不能在QT软件中Debug,需移植ARM进行功能测试。可用file命令查看文件运行环境:

在这里插入图片描述

二. 使用busybox构建根文件系统

参考链接:https://blog.csdn.net/u014783685/article/details/105034074/

  1. 解压busybox-1.30.0.tar.bz2:
tar -vxjf busybox-1.30.0.tar.bz2

  1. 修改Makefile(如果已设置全局交叉编译环境可忽略以下两条),添加编译器,打开busybox的根目录中的Makefile,将164行修改为:
CROSS_COMPILE ?= /home/book/share/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

将路径修改为自己的交叉编译工具的绝对路径,将190行修改为:

ARCH ?= arm

  1. 配置busybox,busybox有三种配置选项:
  • defconfig,默认配置
  • allyesconfig,全选配置,使能busybox中的所有功能
  • allnoconfig,最小配置
    使用默认配置,执行:
make defconfig

然后打开图形配置界面,执行:

make menuconfig

分别配置下面的路径:

Location:
  -> Settings
	-> Build static binary (no shared libs) //取消选中,动态编译,不然编译出来的根文件系统很大
Location:
  -> Settings
	-> vi-style line editing commands  //选中
Location:
  -> Linux Module Utilities
	-> Simplified modutils   //取消选中
Location:
  -> Linux System Utilities
	-> mdev (16 kb) //确保下面的全部选中,默认都是选中的

  1. 配置完busybox就可以编译了,执行:
make install CONFIG_PREFIX=/home/book/nfs_rootfs/blogrootfs

CONFIG_PREFIX指定输出路径,指向nfs服务器的路径即可。编译完成后可以查看rootfs路径下的文件:
在这里插入图片描述

  1. 向根文件系统添加lib
    在rootfs下创建lib文件夹,在usr下创建lib文件夹。
  • 进入交叉编译器存放的目录,将arm-linuxgnueabihf/libc/lib下的so和***.a拷贝到rootfs/lib**下:
 cp *so* *.a ~/nfs_rootfs/blogrootfs/lib/ -d

后面的“-d”表示拷贝符号链接。在rootfs中lib执行ls ld-linux-armhf.so.3 -l,可以看到ld-linux-armhf.so.3是一个软链接,所以需要重新复制一下。先删除rootfs/lib下的ld-linux-armhf.so.3,然后进入arm-linuxgnueabihf/libc/lib执行:

cp ld-linux-armhf.so.3 ~/nfs_rootfs/blogrootfs/lib/

再次查看rootfs/lib下的ld-linux-armhf.so.3,已经不是软链接了。

  • 进入交叉编译器存放的目录,将arm-linuxgnueabihf/lib下的so和***.a拷贝到rootfs/lib**下:
 cp *so* *.a ~/nfs_rootfs/blogrootfs/lib/ -d

  • 进入交叉编译器存放的目录,将arm-linuxgnueabihf/libc/usr/lib下的so和***.a拷贝到rootfs/usr/lib**下:
 cp *so* *.a ~/nfs_rootfs/blogrootfs/usr/lib/ -d

可能会有警告,不用管。

  1. 创建其它文件夹
    在rootfs根目录下创建文件夹:dev、 proc、 mnt、 sys、 tmp、root,创建完后如下图示:
    在这里插入图片描述
  2. 测试根文件系统
    测试根文件系统一般都使用NFS,在内核启动时指定使用的nfs服务器以及路径,设置好后保存环境变量,然后使用tftp加载内核和设备树并启动:
  3. 配置TFTP环境

3.1. Ubuntu 安装 TFTP 服务

注意:使用 VMware NAT 网络或 Docker 时,不需要在 Ubuntu 中安装 TFTP 服务,而是在 Windows 运行

tftpd64 程序。

在 Ubuntu 中执行以下命令安装 TFTP 服务:

book@100ask:~$ sudo apt-get install tftp-hpa tftpd-hpa

然后,创建 TFTP 服务器工作目录,并打开 TFTP 服务配置文件,如下:

book@100ask:~$ mkdir -p /home/book/tftpboot
book@100ask:~$ sudo chmod 777 /home/book/tftpboot
book@100ask:~$ sudo vim /etc/default/tftpd-hpa

在配置文件/etc/default/tftpd-hpa 中,添加以下字段:

TFTP_DIRECTORY="/home/book/tftpboot"
TFTP_OPTIONS="-l -c -s"

最后,重启 TFTP 服务:

book@100ask:~$ sudo service tftpd-hpa restart

查看 tftp 服务是否在运行,运行如下命令,即可查看是否在后台运行。

book@100ask:~$ ps –aux | grep “tftp”

在这里插入图片描述

3.2. 准备工作

使用NFS根文件系统时,涉及3个文件:zImage 、 设备树(比如100ask_imx6ull-14x14.dtb)、

rootfs.tar.bz2(解压到Ubuntu某个目录,比如/home/book/nfs_rootfs)。 这里我们使用之前所构建根文件的对应目录

在U-Boot中通过tftpboot命令从Ubuntu/Windows中下载内核文件zImagen、100ask_imx6ull-14x14.dtb,

设置Uboot启动参数使用Ubuntu的某个目录(比如/home/book/nfs_rootfs)作为根文件系统。

1) 拷贝内核和设备树文件到 tftp 目录:

如果使用 VMware 桥接网络,将出厂镜像或者自行编译的 zImage 和设备树文件 100ask_imx6ull-

14x14.dtb,拷贝到 Ubuntu 的 /home/book/tftpboot 目录。

2) 把制作好的最小根文件系统压缩包拷贝到 NFS 目录:

3) 确认客户机与服务端互通:

先在 u-boot 中设置开发板 IP 为 192.168.1.112,然后在 u-boot 中使用 ping 命令测试开发板与 Ubuntu

系统是否连通(出现“alive”就表示联通):命令如下:

=> setenv ipaddr 192.168.1.112
=> ping 192.168.1.224

3.3. 配置选项,网络启动内核

先在 Ubuntu 的 TFTP 目录中放入 zImage 和设备树文件,再在/home/book/nfs_rootfs 目录下拷贝配置好的根文件系统。

然后在 U-Boot 控制台执行以下命令启动单板,假设 Ubuntu IP 是 192.168.1.224:

=> setenv serverip 192.168.***.*** //设置服务器的 IP 地址,这里指的是 Ubuntu 主机 IP
=> setenv ipaddr 192.168.***.*** //设置开发板的 IP 地址。
=> setenv nfsroot /home/book/nfs_rootfs/*** //设置文件系统所在目录。
=> run netboot //设置完成后,运行网络启动系统命令

3.4. 启动流程

U-boot通过tftp从服务端tftp指定目录下下载到内核设备树加载入内存,从而启动内核,最终挂载根文件系统

在这里插入图片描述

启动完成后如下图:
在这里插入图片描述
可以执行基本的命令了,但是提示没有/etc/init.d/rcS文件,所以需要完善一下文件系统。

3. 完善根文件系统

3.1 创建/etc/init.d/rcS文件

linux启动后需要运行一些服务,而 /etc/init.d/rcS文件就是规定启动哪些服务,创建该文件并添加如下内容:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
#往PATH里面新增一个~/bin的路径,如果不加:$PATH的话,就表示直接把PATH赋值为~/bin,这样你其他的老路径就丢失了。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug #通过这两行,linux内核就可以在/dev目录下自动创建设备节点
mdev -s
mount -a
exec /etc/rc.local

将rcS添加可执行权限chmod 777 rcS

创建/etc/rc.local,创建该文件并添加如下内容:

\#!/bin/sh
. /etc/profile #注意.后边有个空格!

创建/etc/profile,暂且不添加内容.

3.2 创建/etc/fstab文件

fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区,创建该文件并添加如下内容:

#<file system> <mount point> <type> <options> <dump> <pass>
proc           /proc         proc    defaults   0      0
tmpfs          /tmp          tmpfs   defaults   0      0
tmpfs          /dev          tmpfs   defaults   0      0
sysfs          /sys          sysfs   defaults   0      0

3.3 创建/etc/inittab文件

init 程序会读取/etc/inittab这个文件, inittab 由若干条指令组成,创建该文件并添加如下内容:

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/umount -a -r
::shutdown:/sbin/swapoff -a

3.4 创建/etc/resolv.conf文件

/etc/resolv.conf文件用于配置域名服务器,没有域名服务器就不能将网址转换成ip地址,创建该文件并添加如下内容:

nameserver 114.114.114.114
nameserver 192.168.101.1

创建完以上三个文件后,重启linux,发现没有错误提示了。ping一下百度也可以ping通,网络也可以使用了,此时可以通过交叉编译器来编译可以在100ASK开发板上运行的linux程序了。

3.5 构建 /dev 目录

mkdir -p ~/nfs_rootfs/blogrootfs/dev
cd ~/nfs_rootfs/blogrootfs/dev
sudo mknod console c 5 1
sudo mknod null   c 1 3

三.编译QT_arm源码与tslib

一. 安装tslib

tar xzf tslib-1.4.tar.gz
cd tslib
mkdir -p generated_tslib_ok/tslib
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=arm-linux-gnueabihf-gcc \
-prefix=$(pwd)/generated_tslib_ok/tslib

make&sudo make install

tslib安装在/generated_tslib_ok/tslib目录下:

在这里插入图片描述

二. 安装qt-everywhere-opensource-src-5.6.0

tar -xf qt-everywhere-opensource-src-5.6.0.tar.gz
cd qt-everywhere-opensource-src-5.6.0

vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

原配置文件:

修改配置文件:(注意以下选项:QMAKE_INCDIR QMAKE_LIBDIR对应tslib安装目录)

#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM  = linuxfb
QMAKE_CFLAGS_RELEASE    += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE  += -O2 -march=armv7-a
QMAKE_INCDIR +=/home/book/QT_imx6ull/tslib/generated_tslib_ok/tslib/include
QMAKE_LIBDIR +=/home/book/QT_imx6ull/tslib/generated_tslib_ok/tslib/lib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_NM                = arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-linux-gnueabihf-strip
load(qt_config)

配置选项:

./configure -v -prefix /opt/qt-5.6.0 -release \
-opensource -no-accessibility \
-make libs -xplatform linux-arm-gnueabi-g++ -optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-zlib \
-tslib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-I /home/book/QT_imx6ull/tslib/generated_tslib_ok/tslib/include \
-L /home/book/QT_imx6ull/tslib/generated_tslib_ok/tslib/lib

执行安装:

make
sudo make install

最终生成文件:

在这里插入图片描述

四. QT与tslib移植

cp /opt/qt-5.6.0 /home/book/nfs_rootfs/blogrootfs/
cp /home/book/QT_imx6ull/tslib/generated_tslib_ok/tslib/ /home/book/nfs_rootfs/blogrootfs/

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

[外链图片转存中…(img-JUPTJ9xx-1715535248381)]

[外链图片转存中…(img-Dfeio9pj-1715535248382)]

[外链图片转存中…(img-RmRGNpVc-1715535248382)]

[外链图片转存中…(img-Dw2HeuXM-1715535248382)]

[外链图片转存中…(img-xr34r6Nn-1715535248383)]

[外链图片转存中…(img-wLzqkXJH-1715535248384)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值