原文:https://www.taterli.com/3213/
标题老长呢.反正什么都是新的,所有都是开源的,除了下载工具以外,所有源码都有(据说下载工具也有,我懒得找了.),编译器源码自己也能做,但是没必要了.代码下载地址:https://github.com/nickfox-taterli/imx283a-new/releases/tag/v0.1首先有一个Ubuntu系统,当然Debian也行,如果想减少麻烦,就跟我一样.我用Ubuntu 16.04 x64版本.至少分个40G空间哦.如果很多莫名其妙问题,建议你重装下Ubuntu.第一步,不管怎样,先把系统升级到最新的软件上.需要执行apt-get update -> apt-get upgrade -> apt-get dist-upgrade几步,需要的话也可以用root登录.但是要注意安全.第二步,安装各种东西.apt-get install vim htop gcc g++ autoconf p7zip-full lib32ncurses5 lib32z1 gcc-arm-linux-gnueabihf gcc-arm-linux-gnueabi g++-arm-linux-gnueabihf g++-arm-linux-gnueabi libssl-dev lib32stdc++6 git libtool dropbear texinfo
第三步:把FSL官方的编译器复制过来.并确认可以直接访问(通过添加环境变量方式).一切稳妥应该如图所示.
第四步,解压下载到的源码,用7z x xxx.zip方式,然后得到下面文件.
第五步:切换到内核目录,依次执行:
make mxs_defconfig
make zImage dtbs
第六步:切换到U-Boot目录,依次执行:
make mx28evk_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-
第七步:复制u-boot文件到bootlets目录下.
第八步:复制zImage到bootlets下,实际上并用不上,但是不复制会报错.
第九步:切换到目标目录下执行build.
第十步,从imx-bootlets得到文件.并把文件复制出来,备用.
第十一步,把内核和dtb也复制出来备用.实际文件如图.
第十二步,进busybox目录,把默认配置文件复制成配置文件.
第十四步.make -> make install
第十五步,切换到安装目录下,新建一堆别的目录.
mkdir dev etc lib proc sys tmp var
第十六步,拷贝运行库.因为这个是用系统工具编译的,所以要的是系统工具引用的库.
cp -a /usr/arm-linux-gnueabi/lib/* lib/
第十七步,这个文件没用,要删掉.指向本机的hf编译器动态库路径.
第十八步,复制默认配置文件:
cp -a ../examples/bootfloppy/etc/* etc/
第十九步,删掉etc/inittab的第三行.
第二十步,添加挂载点.
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
第二十一步,下载并解压zlib,具体查看github上给出的链接.
第二十二步,进入到zlib目录,并配置zlib.
./configure --prefix=/opt/cross-arm/zlib
第二十二步,修改zlib的Makefile:
CC=arm-linux-gnueabi-gcc
CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -mcpu=arm926ej-s
AR=arm-linux-gnueabi-ar
RANLIB=arm-linux-gnueabi-ranlib
LDCONFIG=arm-linux-gnueabi-ldconfig
LDSHARED=arm-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-linux-gnueabi-gcc -E
第二十三步,make -> make install
第二十四步,获取dropbear.
第二十五步,执行atuoheader + autoconf来生成configure信息.
第二十六步,执行配置:
./configure --prefix=/opt/cross-arm/dropbear --with-zlib=/opt/cross-arm/zlib CC=arm-linux-gnueabi-gcc CFLAGS='-mcpu=arm926ej-s' --host=arm
第二十七步,make -> make scp -> make install.
第二十八步,获取tslib.
第二十九步,执行autogen.sh来生成一些配置信息.
第三十步,执行配置.
./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/opt/cross-arm/tslib CFLAGS='-mcpu=arm926ej-s'
第三十一步,make -> make install.
第三十二步,获取qt.链接看github里面的.版本5.7.1,因为5.8.0不支持ARM9了,悲剧.
第三十三步,Qt配置有很多,我们现在只是先举例.(为了快速完成,我就多skip了一些东西.)
./configure -prefix /opt/cross-arm/Qt5.7-arm -opensource -confirm-license -release -shared -xplatform linux-arm-gnueabi-g++ -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -tslib -no-sse2 -no-openssl -no-cups -no-glib -no-dbus -no-xcb -no-eglfs -no-separate-debug-info -no-iconv -make libs -nomake examples -nomake tools -nomake tests -skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland -I/opt/cross-arm/tslib/include -L/opt/cross-arm/tslib/lib
第三十四步,编辑qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件.
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLAYFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
QMAKE_INCDIR += /opt/cross-arm/tslib/include
QMAKE_LIBDIR += /opt/cross-arm/tslib/lib
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
QMAKE_NM = arm-linux-gnueabi-nm -P
QMAKE_STRIP = arm-linux-gnueabi-strip
load(qt_config)
第三十五步,make -> make install.
第三十六:把tslib手动安装到文件系统内.
第三十七步,把dropbear手动安装过去.
第三十八步,创建一个dropbear配置目录,但是暂时不用生成key.
第三十九步,创建hostname.
第四十步,创建密码文件,内容如下:
root@tater-VirtualBox:~/zlg_src/busybox-1.27.2/_install# cat etc/group
root::0:root
root@tater-VirtualBox:~/zlg_src/busybox-1.27.2/_install# cat etc/shadow
root:fAwTdQCthcZf2:0:0:99999:7:::
root@tater-VirtualBox:~/zlg_src/busybox-1.27.2/_install# cat etc/passwd
root:x:0:0:root:/:/bin/sh
root@tater-VirtualBox:~/zlg_src/busybox-1.27.2/_install#
第四十一步,修改inittab.替换成/bin/login,开启登录功能.
第四十二步,复制Qt库.
第四十二步,下载字体:
第四十三步,解压并复制字体到usr/lib/fonts里面.
第四十四步,安装Qt-Creater,版本无关.只是个外壳.
第四十五步,新建Qmake参数.
第四十六步,新建编译器.
第四十七步,用飞思卡尔自己的调试器也并没问题的,当然最好自己去下载什么调试器之类的.
第四十八步,新建一个Device,IP先随便,用户名root,密码root.
第四十九步,新建Kit.
第五十步,新建工程.
第五十一步,指定,目录.
第五十二步,新建成QWidget.
第五十四步,窗口调成480*272大小.
第五十五步,新建个按钮.
第五十六步,写代码:
#include "widget.h"
#include "ui_widget.h"
#include
#include
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QMessageBox::information(this,tr("Hello"),tr("I am TaterLi."));
}
第六十步,编译并把生成文件复制到文件系统.
第七十步,修改开机脚本.
#!/bin/sh
/bin/hostname -F /etc/hostname
/bin/mount -a
/sbin/udhcpc -b >/dev/null &
/usr/sbin/dropbear >/dev/null &
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
export TSLIB_PLUGINDIR=/usr/lib/ts/
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export LD_LIBRARY_PATH=/usr/lib
export QT_QWS_FONTDIR=/usr/lib/fonts
export QWS_MOUSE_PROTO=/dev/input/event0
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=/usr/lib/fonts
/HelloQt -plugin tslib:/dev/input/event0 >/dev/null &
第七十一步,添加DHCP脚本.(需要创建目录,截图漏了.)
第七十二步,把rootfs打包.并把之前打包的东西一起拷贝到主机.下一步就要烧写测试下了.
第七十三步,修改ZLG-IMX283A烧写工具的ucl.xml文件,以便适配.(使用u-boot启动)
第七十四步,在Windows下,选择烧写算法.
第七十五步,接上板子短路帽,OTG模式和USB BOOT,然后开始烧写.(注意,现在是zImage启动.)
第七十六步,虽然启动,但是还没完成,现在继续生成dropbear的key.(登录用户名root密码root).
dropbearkey -t rsa -f dropbear_rsa_host_key
dropbearkey -t dss -f dropbear_dss_host_key
第七十七步,发现触摸不好用,要先关掉Qt自启先配置好校准参数,编译/etc/init.d/rcS文件.
第七十八步,重启开发板.运行触摸校准.
export TSLIB_PLUGINDIR=/usr/lib/ts/
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
ts_calibrate
第七十九步,提取校准后文件.
~ # cat /etc/pointercal
-8637 -2 33575416 -139 5731 -2793152 65536 480 272
第八十步,提取ssh key文件.这个不那么好提取,或许要挂在个U盘,把文件拉出来.不能cat.
第八十一,把文件又复制到文件系统,重新打包烧写.
第八十二步,重新烧写.
第八十三步,SSH验证OK.
第八十四步,触摸显示验证OK.
第八十五步,系统已经完成,下面说一个通用的加开源软件办法,其中我就是加入调试的gdbserver和strip一下库了.获取下gdbserver.
./configure --prefix=/opt/cross-arm/gdbserver CC=arm-linux-gnueabi-gcc CFLAGS='-mcpu=arm926ej-s' --host=arm-linux-gnueabi
第八十六步,然后编译,make -> make install.最后把得到的文件复制过去.