JZ2440(V3)移植QT5.6

更新于2018.10.06 21:10

本文严禁转载

文章信息

撰写日期 2018.10.06
完稿日期 暂未完成
最近维护 2018.10.07
本文作者 multimicro

开发环境

环境说明 详细信息 备注信息
操作系统 Ubuntu 18.04.1 LTS 官网地址 | 清华镜像
操作系统内核版本 4.15.0-36-generic
编译器 arm-linux-gcc-4.4.3 下载地址
编译器路径 /usr/local/arm/gcc-4.4.3/bin
u-boot版本 u-boot-2014.04.01 官网地址 | 百度网盘
kernel版本 linux-3.4.2 官网地址
busybox版本 busybox-1.22.1 官网地址
tslib版本 tslib-1.4 官网地址
Qt版本 qt-everywhere-opensource-src-5.6.0 官网地址

友情提示

本文所用的编译器全部为指定路径下的绝对路径,并没有把编译器配入环境变量中去

1.编译u-boot

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

我修改了内核分区大小,将默认的2m改为了4m(打完补丁在进行以以下操作)

vim include/configs/smdk2440.h

这是我改后的文件
JZ2440(V3)移植QT5.6
保存退出后执行以下命令

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

编译完成后通过ls命令就可以看到u-boot.bin文件了
JZ2440(V3)移植QT5.6
若提示arm-linux-gcc command not found:

  1. 指定的编译器绝对路径错误
  2. 你的Linux系统为64位的,编译器为32位的,参考这里:https://blog.csdn.net/multimicro/article/details/82665972
  3. 未完待定

2.编译内核

cd linux-3.4.2/
patch -p1 <../linux-3.4.2_100ask.patch
cp config_ok .config

接下来把内核所在分区修改为4m

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

下图是我修过后的文件
JZ2440(V3)移植QT5.6
然后在执行以下命令

make menuconfig CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- ARCH=arm -j8
make uImage CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- ARCH=arm -j8

JZ2440(V3)移植QT5.6
内核完成

3. 烧写u-boot

在windows下通过openJTAG下载吧,或者进Nor-Flash中用老版本的u-boot下载,这个就需要借助DNW工具了
启动新加载的u-boot
JZ2440(V3)移植QT5.6

通过mtdparts命令可以看出经过u-boot划分后的flash分区,其中kernel已经为修改后的4M大小

4. 烧写kernel

4.1 tftp和nand flash命令简介


  1. //通过tftp协议将tftp共享文件夹里面的uImage文件下载到板内地址为0x30000000的SDRAM内存中
    tftp 0x30000000 uImage
  2. //nand erase [clean] [off size] 其下命令表示擦除nand flash内存中偏移0x60000(off)地址后的大小为0x00400000(size)的flash位置空间 。[clean] 中[ ] 表示其中的命令是可选的
    nand erase 0x60000 0x00400000
    //下面这种方法不用考虑偏移量offset和擦除大小size,当然,kernel这个名字是要在u-boot中通过mtdparts命令获取的,见上图
    nand erase.part kernel
  3. //其下命令表示将SDRAM中存放在地址为0x30000000地方的文件下载到flash偏移地址为0x60000的大小为$filesize中去
    //偏移量0x60000也是通过mtdparts命令获取得知的,见上图
    nand write.jffs2 0x30000000 0x60000 $filesize

4.2 用tftp命令烧写kernel

tftp准备工作参考这篇文章:https://blog.csdn.net/multimicro/article/details/82288535 ,烧写工作看这个就行了

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

下面第一个蓝色框框里面的数据和上图红色框框里的数据是一样的哦
JZ2440(V3)移植QT5.6
然后输入boot启动内核
若内核启动乱码,则重启开发板,在u-boot命令行中输入

set bootargs console=ttySAC0,115200
save

然后输入
boot
启动即可
启动内核后的打印信息:
没有修改前的2M分区内核
JZ2440(V3)移植QT5.6
修改后的4M分区内核
JZ2440(V3)移植QT5.6

5.制作busybox

cd busybox-1.22.1/
make menuconfig CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- ARCH=arm -j8
make CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- ARCH=arm -j8
make CROSS_COMPILE=/usr/local/arm/gcc-4.4.3/bin/arm-linux- ARCH=arm -j8 install COFIG_PREFIX=/home/china/work/nfsroot/busybox

其余暂时参考:https://blog.csdn.net/lizuobin2/article/details/52673494

6.制作tslib(touch screen lib)

首先安装

  sudo apt-get install autoconf automake libtool

然后(里面的 CC= 和 CXX= 我指定的是编译器的指定路径,所以make的时候就不需要指定了)

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
make
make install -j8

其余配置步骤暂时参考:https://blog.csdn.net/lizuobin2/article/details/52673494

7. 制作并烧写yaffs2文件系统

7.1 制作yaffs2文件系统

7.1.2 准备mkyaffs2image工具

  1. 首先需要yaffs2制作工具mkyaffs2image此文件在韦东山提供的JZ2440配套光盘A盘里面的tools文件夹下有
    JZ2440(V3)移植QT5.6
  2. 或者来到B盘这里
    JZ2440(V3)移植QT5.6
    在此文件夹路径下终端make一下,也能出来这个工具
    JZ2440(V3)移植QT5.6
    Tips: 执行make clean生成的文件就消失了

把这个mkyaffs2image工具复制到/usr/local/bin/目录下,这样就可以直接在终端中使用此工具了

sudo cp mkyaffs2image /usr/local/bin/

7.1.2 用mkyaffs2image 制作后缀为.yaffs2的文件系统

找到制作好的busybox文件夹,这个文件夹是本文第5步下的busybox安装位置
JZ2440(V3)移植QT5.6
JZ2440(V3)移植QT5.6

7.2 烧写文件系统yaffs2

tftp 0x30000000 busybox.yaffs2
nand erase.part rootfs
nand write.yaffs 0x30000000 0x460000 $filesize

通过u-boot中的mtdparts命令打印出的信息,设置offset信息哦
JZ2440(V3)移植QT5.6
烧写yaffs2文件系统
JZ2440(V3)移植QT5.6
此时直接输入boot启动会出现以下信息“root=”下没有挂载文件系统,看下图可知文件系统分区在mtdblock3地方
JZ2440(V3)移植QT5.6
重启开发板,在u-boot中执行以下命令挂载文件系统所在分区:

set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
save
boot

可以看出挂载后的系统了
JZ2440(V3)移植QT5.6
至此,文件系统烧写并挂载成功!

8. 编译Qt5.6