jz2440:在开发板移植QT5.6(8)

本文绝大多数参考JZ2440(V3)移植QT5.6--图文教程,以及数不清的参考。。。

只是把自己开发过程中遇到的问题做了重点记录,希望对搭建环境的朋友有所帮助。。。 

  • 环境:ubuntu18.04(如果不是,建议重装系统---我最开始用的20.04,然后有问题,最后重装了---)
  • 生成yaffs2的工具:
  • busybox及文件夹:busybox-1.22.1
  • 交叉工具链:arm-linux-gcc-4.4.3
  • u-boot :u-boot-2014.04.01
  • 内核:Linux3.4.2
  • 密码 2r1n所用到的所有文件在这个地方,如果少了,欢迎留言,我会找时间更新。。

在编译过程中遇到的问题,我都写在这篇博客的标红字体处了https://blog.csdn.net/m0_37844072/article/details/113925193

1.编译u-boot

cd u-boot-2012.04.01/
patch -p1 <../u-boot-2012.04.01_100ask.patch 

gedit include/configs/smdk2440.h
在这里插入图片描述

 注:/usr/local/arm/gcc-4.4.3/bin/arm-linux-为交叉工具链的绝对路径

 保存退出后执行以下命令编译u-boot,可在u-boot文件夹下看到u-boot.bin文件。

make CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- smdk2440_config
make CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- -j8

2.编译支持网卡+LCD的内核linux-3.4.2

cd linux-3.4.2/

patch -p1 <../linux-3.4.2_100ask.patch

cp config_ok .config

gedit arch/arm/mach-s3c24xx/common-smdk.c

在这里插入图片描述

Step 1
增加的支持触屏文件s3c2440_ts.c文件见上述百度云盘资料

把s3c2440_ts.c拷贝至如下内核文件夹下

在这里插入图片描述

Step 2
修改linux-3.4.2/drivers/input/touchscreen/下的Kconfig文件
如图,可以仿照2410的配置文件撰写

在这里插入图片描述

Step 3
修改linux-3.4.2/drivers/input/touchscreen/下的Makefile文件
如图,可以仿照2410的配置文件撰写

在这里插入图片描述
Step 4

进入menuconfig中开启s3c2440的触屏支持
下面进入menuconfig里面进行配置
熟悉menuconfig的朋友估计发现了,我在Kconfig中配置2440的信息时,加了一行代码:default y,目的就是编译内核时默认编译内核中。当然,我么也可以进入menuconfig里面进行配置或查看:
通过以下命令进入menuconfig

make menuconfig   (在linux-3.4.2的根目录下)

通过"/"来查找s3c2440,可以看到如何配置上屏幕的驱动。。

 选择*直接编译入内核中,然后重新编译内核即可。编译命名此处不再粘贴!

在这里插入图片描述

make uImage CROSS_COMPILE=/usr/local/arm/toolschain/4.4.3/bin/arm-linux- ARCH=arm -j8
编译完后,烧录进去的内核会打印出如下信息:

 3. 烧录u-boot和kernel

step1:烧写u-boot

参照https://blog.csdn.net/m0_37844072/article/details/113729680第二点

step2:烧写内核

在windows下得到本地网线端口的IP,然后参照链接,依次执行以下命令 https://blog.csdn.net/m0_37844072/article/details/119228207

tftp 0x30000000 uImage
nand erase.part kernel
nand write.jffs2 0x30000000 0x60000 $filesize

在这里插入图片描述

然后输入boot启动内核
若内核启动乱码,则重启开发板,在u-boot命令行中输入

set bootargs console=ttySAC0,115200
save

然后输入boot启动即可。

4. 制作busybox

参考https://blog.csdn.net/lizuobin2/article/details/52673494

参考https://blog.csdn.net/m0_37844072/article/details/113925193第三点

1、解压

  • tar jxvf busybox-1.22.1.tar.bz2

2、配置

  • make menuconfig
  • 报错:<command-line>:0:12: fatal error: curses.h: No such file or directory

安装:sudo apt-get install libncurses5-dev

  • 注意:arm-linux-gcc-4.4.3.tar.gz 是32 bit ,如果 系统是Ubuntu32 bit,那么就可以看到已经成功了,会显示arm-linux-gcc 的版本信息。但如果Ubuntu 64 bit,就会显示错误:
  • 报错:/usr/local/arm_4.4.3/bin/arm-linux-gcc: 15: exec: /usr/local/arm_4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found

这是因为64 bit的Ubuntu系统缺少32 bit的库,需要安装。Ubuntu12.04 64 bit以后的版本就没有32位的库。
所以执行:
apt-get install libc6:i386

apt-get install lib32ncurses5

apt-get install lib32z1

  •   Busybox Settings ->
  •   general configuration ->    [*] don't use /usr                   //选中它 否则会破坏虚拟机
  •   build options->  cross comliler prefix = arm-linux-        //选择交叉编译工具
  •   installtion options-> busybox installation prefix = /work/my_rootfs //指定安装路径

3、编译&安装
  mkdir -p /work/my_rootfs                 //安装路径
  make
  make install
  cd /work/my_rootfs
  ls                 //查看是否安装成功
  编译安装完毕之后,我们的文件系统就生成在 /work/my_roofs 目录下了
4、构建 /dev 目录
  mkdir -p /work/my_rootfs/dev
  cd /work/my_rootfs/dev
  sudo mknod console c 5 1
  sudo mknod null   c 1 3

5、创建 /etc/inittab
  mkdir -p /work/my_rootfs/etc
  vi /work/my_rootfs/etc/inittab

  # /etc/inittab
  # 启动脚本/etc/init.d/rcS
  ::sysinit:/etc/init.d/rcS
  # 启动 shell
  ::askfirst:-/bin/sh
  # 重启关机前 卸载文件系统
  ::ctrlaltdel:/sbin/reboot
  ::shutdown:/bin/umount -a -r

 6、创建rc.local
  vi /work/my_rootfs/etc/rc.local

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

7、创建/etc/fstab
  vi /work/my_rootfs/etc/fstab

  # device mount-point type options dump fsck order
  proc  /proc proc defaults 0 0
  sysfs  /sys sysfs defaults 0 0
  tmpfs /tmp tmpfs defaults 0 0
  tmpfs /dev tmpfs defaults 0 0

8、创建 /etc/init.d/rcS

  mkdir -p /work/my_rootfs/etc/init.d
  vi /work/my_rootfs/etc/init.d/rcS

#!/bin/sh
# 挂载文件系统
mount -a
# 使用内存文件系统
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
# 设置IP
#/sbin/ifconfig eth0 192.168.1.17 #nfs不需要
# 挂载 /etc/fstab 中的文件系统
mount -a
exec /etc/rc.local

9、创建其它目录
  mkdir proc mnt tmp sys root usr
10、拷贝Lib
  cd /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib
  cp *.so* /work/my_rootfs/lib -d
  cd /opt/FriendlyARM/toolschain/4.4.3/lib
  cp *.so* /work/my_rootfs/lib -d

5.移植tslib(屏幕驱动)

step1:

sudo apt-get install autoconf automake libtool

step2:修改参数

检测编译器里面的EV_VERSION数值是否和内核include/linux/input.h文件的EV_VERSION所使用的一致,如果不一致,把编译器的EV_VERSON修改为和内核EV_VERSION一致。以内核的为基准。这里是都改为0x010001

step3:编译tslib

tar -xzvf tslib-1.4.tar.gz 

cd tslib/

./autogen.sh

./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=/usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-g++ -prefix=/home/china/work/jz2440/qt/tslib_root

  执行./configure报错如上图,查看config.log发现----

于是为了使得系统带这个so, 安装这玩意儿即可找到so     sudo apt-get install lib32z1 于是可执行./configure

sudo make

make install -j8

step4:更改 tslib 配置文件
  cd /usr/local/tslib/etc/
  sudo vi ts.conf 
  去掉# module_raw input 前面的 “#” 和空格
step5: 将制作好的 tslib 移动到我们制作的文件系统
  cd /usr/local
  sudo tar zcvf tslib.tar.gz tslib
  mkdir -p /work/my_rootfs/usr/local
  cp tslib.tar.gz /work/my_rootfs/usr/local
  tar zxvf tslib.tar.gz 
  rm tslib.tar.gz 
step6: 添加 tslib 环境变量
  vi /work/my_rootfs/etc/profile

  #!/bin/sh
  export T_ROOT=/usr/local/tslib
  export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH
  export TSLIB_CONSOLEDEVICE=none
  export TSLIB_FBDEVICE=/dev/fb0
  export TSLIB_TSDEVICE=/dev/input/event0
  export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
  export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
  export POINTERCAL_FILE=/etc/pointercal
  export TSLIB_CALIBFILE=/etc/pointercal

  此时,tslib 就已经移植好了,你可以挂载 nfs 文件系统启动,cd /usr/local/tslib/bin执行  ./ts_test 来测试。

6.生成烧录yaffs文件

6.1制作yaffs系统

  • 在下图的位置make 生成mkyaffs2image。

  •  sudo cp mkyaffs2image /usr/local/bin/    
  • mkyaffs2image my_rootfs my_rootfs.yaffs2  //生成yaffs2文件大概17.9M左右

6.2烧录

进入boot模式后,通过下面的操作,设置主机IP地址-----

 通过tftp命令烧录yaffs系统

tftp 0x30000000 busybox.yaffs2

nand erase.part rootfs

nand write.yaffs 0x30000000 0x460000 $filesize

7.编译QT

Step 1 准备好Qt5.6源码包
qt-everywhere-opensource-src-5.6.0.tar.gz
Step 2 解压Qt5.6源码包,并建立自动配置脚本文件

tar -zxf qt-everywhere-opensource-src-5.6.0.tar.gz

cd qt-everywhere-opensource-src-5.6.0/

touch qt-build.sh

vim qt-build.sh

把下面这些粘贴进去
-prefix后面是编译好的Qt安装路径,提前建立好
-I后面是编译安装好的tslib中include路径
-L后面是编译安装好的tslib中lib路径

#!/bin/sh
./configure -prefix /home/zion/Desktop/QT \
-v \
-opensource \
-release \
-confirm-license \
-xplatform linux-arm-gnueabi-g++ \
-shared \
-qt-zlib \
-no-gif \
-qt-libjpeg \
-no-nis \
-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 \
-qreal float \
-qt-libpng \
-tslib \
-nomake examples \
-I /home/zion/Desktop/QT/tslib-1.4/tslib/tslib_root/include \
-L  /home/zion/Desktop/QT/tslib-1.4/tslib/tslib_root/lib

 Step 3 配置Qt的平台信息
执行:vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf替换下列文件

注意: /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-为交叉工具链的位置,需要替换为自己的目录

#
# 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     += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t 
QMAKE_CXXFLAGS     += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t

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

# modifications to g++.conf
QMAKE_CC                = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX               = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK              = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB        = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-g++ -lts

# modifications to linux.conf
QMAKE_AR                = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-objcopy
QMAKE_NM                = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-nm -P
QMAKE_STRIP             = /usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-strip

step4:    make -j8 

报错:building qtqml requires python,系统是ubuntu18.04,安装有python3,修复需要做2步:

1.用nano或者vi修改别名文件

$vi .bashrc

添加别名

alias python=python3

保存后,输入下面命令生效

$ source .bashrc

这个时候python已经能打印信息了

2.编译依然有错误,复制python3文件夹为python。

先查询python3路径,命令:

$ which python3

$ sudo cp /usr/bin/python3 /usr/bin/python

step5: make install  结果如下图

step 6: 仅把上图中的libs plugins两个文件夹复制(通过NFS文件系统)至JZ2400开发板即可。开发板如下图

参考NFS(mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.3.9:/home/zion/Desktop/nfs_root  /nfs_root)

Step 7 在开发板中配置Qt的环境变量

在文件系统 /etc/profile 里添加

export QTEDIR=/usr/local/Qt5.6
export LD_LIBRARY_PATH=/usr/local/Qt5.6/lib: LD_LIBRARY_PATH
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_FONTDIR=$QTEDIR/lib/fonts 
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTEDIR/plugins 
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=480x272:mmsize=480x272:offset=0x0:tty=/dev/tty1
export QT_QPA_FB_TSLIB=1

至此开发板的环境搭建完成。。。。。。

Guess you like

Origin blog.csdn.net/m0_37844072/article/details/119303494