本文绝大多数参考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:i386apt-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 = sublibQT_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=arm920tinclude(../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
至此开发板的环境搭建完成。。。。。。