原文: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 type="push" body="send" file="files/imx28-evk.dtb">Sending dtb</CMD> <CMD type="push" body="$ mtdwrite -d /dev/mtd0 -f $FILE -a 0x800000">Flashing dtb firmware</CMD> <CMD type="push" body="$ flash_erase /dev/mtd0 0x400000 32">Erasing 0x00400000 32</CMD> <CMD type="push" body="send" file="files/zImage">Sending zImage</CMD> <CMD type="push" body="$ mtdwrite -d /dev/mtd0 -f $FILE -a 0x400000">Flashing zImage firmware</CMD> <CMD type="push" body="$ ubiattach /dev/ubi_ctrl -m 1 -d 0">Attaching UBI partition</CMD> <CMD type="push" body="mknod class/ubi,ubi0,/dev/ubi0"/> <CMD type="push" body="$ ubimkvol /dev/ubi0 -n 0 -N rootfs -s 90000000">Creating UBI volumes</CMD> <CMD type="push" body="$ mkdir -p /mnt/ubi0; mount -t ubifs ubi0_0 /mnt/ubi0" /> <CMD type="push" body="pipe tar -jxv -C /mnt/ubi0" timeout="180" file="files/rootfs.tar.bz2">Transfer rootfs</CMD> <CMD type="push" body="frf">Finish Flashing rootfs</CMD> <CMD type="push" body="$ umount /mnt/ubi0">Unmounting</CMD> <CMD type="push" body="$ echo Update Complete!">Done</CMD> </LIST>
第七十四步,在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.最后把得到的文件复制过去.
标签:BusyBox,4.13,MX283A,gnueabi,etc,linux,root,arm,make From: https://www.cnblogs.com/bruce1992/p/17297704.html