EasyARM i.MX283A 完整系统制作指南(Linux 4.13.2+U-Boot 2017.09+BusyBox 1.27.2+Qt5.7+Dropbear + Tslib + gdbser
Posted MaxBruce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyARM i.MX283A 完整系统制作指南(Linux 4.13.2+U-Boot 2017.09+BusyBox 1.27.2+Qt5.7+Dropbear + Tslib + gdbser相关的知识,希望对你有一定的参考价值。
原文: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 <QApplication>
#include <QMessageBox>
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启动)
<LIST name="NAND uboot-kernel-rootfs(128MB)" desc="Install on singlechip NAND">
<CMD type="boot" body="Recovery" file="imx28_BootCfg.sb" if="HabDisable">Enable unencrypted boot modes.</CMD>
<CMD type="boot" body="Recovery" file="imx28_BootCfg_ivt.sb" if="HabEnable">Enable unencrypted boot modes.</CMD>
<CMD type="wait" body="ResetToRecovery" timeout="3">Waiting for Reset to Recovery.</CMD>
<CMD type="boot" body="Recovery" file="updater.sb" timeout="60" if="HabDisable">Booting update firmware.</CMD>
<CMD type="boot" body="Recovery" file="updater_ivt.sb" timeout="60" if="HabEnable">Booting update firmware.</CMD>
<CMD type="find" body="Updater" timeout="180"/>
<CMD type="push" body="mknod class/mtd,mtd0,/dev/mtd0" timeout="180" />
<CMD type="push" body="mknod class/mtd,mtd1,/dev/mtd1" timeout="180" />
<CMD type="push" body="mknod class/misc,ubi_ctrl,/dev/ubi_ctrl"/>
<CMD type="push" body="$ flash_eraseall /dev/mtd0">Erasing mtd0 partition</CMD>
<CMD type="push" body="$ flash_eraseall /dev/mtd1">Erasing mtd1 partition</CMD>
<CMD type="push" body="send" file="files/imx28_ivt_uboot.sb">Sending uboot</CMD>
<CMD type="push" body="$ kobs-ng init -v $FILE">Flashing uboot firmware</CMD>
<CMD type="push" body="$ flash_erase /dev/mtd0 0x800000 32">Erasing 0x800000 32</CMD>
<CMD