目录
一 Oflash软件通过openJtag下载u-boot.bin到开发板
二 minicom操作u-boot界面
三 ubuntu安装tftp服务器,开发板通过tftp下载uImage到开发板
四 buntu18.04配置nfs
五 boot配置通过NFS启动文件系统
六 通过mkyaffs2image制作文件系统并通过tftp下载至开发板
七 安装arm-linux-gcc-4.4.3交叉编译工具
八 移植tslib1.19到JZ2440
九 ubuntu18.04安装交叉编译过后的Qt 5.6,并移植到JZ2440
十 ubuntu18.04安装Qt 5.12.1,并配置Qt5.6交叉编译环境。
网盘部分文件说明 | ||
---|---|---|
u-boot-2012.04.01-jz2440.tar.gz | 已经移植好的u-boot | make smdk2440_config && make -j8 |
linux-3.4.2-JZ2440V3.tar.gz | 已经移植好的linux内核 | cp config_ok .config && make uImage |
root_fs.tar.bz2 | 使用busybox-1.22.1制作好的根文件系统,且已移植好tslib与qt5.6 | 直接解压作为nfs启动使用 |
tslib_maked.tar.gz | 使用交叉编译工具编译好的tslib1.19。 | 直接解压到自己制作的根文件系统使用。 |
qt-maked-src-5.6.tar.gz | 使用交叉编译工具编译好好的qt5.6(自己编译需花两三个小时) | 解压后执行 make install 进行安装 |
注意:在编译内核前需要将u-boot中的mkimage工具复制到/usr/bin目录下,不然会报错:
sudo cp u-boot-2012.04.01-jz2440/tools/mkimage /usr/bin
1.firefox需要安装一个插件:https://addons.mozilla.org/zh-CN/firefox/addon/baidu-pan-exporter/ 安装后重启Firefox,然后百度云会出现“导出下载”选项。一般要出现导出下载需要浏览器加载一段时间,注观察标签页是否在加载中...
2. 如果使用的chrome,插件下载地址:https://github.com/acgotaku/BaiduExporter 下载后打开chrome,进入“设置->扩展程序”页面,开启右上角的开发者模式,将 BaiduExporter.crx文件拖到该页面进行安装。
3. sudo apt-get install aria2 命令安装多线程下载软件。
4.点击百度网盘下载页面点击“导出下载->文本导出”,然后拷贝下载链接,在终端中进行执行,就可以下载文件啦。
关于u-boot的移植,网上资料太多了,这里略过,u-boot.bin文件可以从网盘下载.
1.下载附件中的oflash文件,放在/home/ningjw/linux/tools目录下。
2.通过命令vim /etc/profile在文件中添加目录/home/ningjw/linux/tools。
3.通过命令source /etc/profile 命令使文件立即生效。
4.进入u-boot.bin所在的目录,执行oflash 0 1 1 0 0 u-boot.bin将u-boot.bin下载到开发板的Nor Flash,或者执行
oflash 1 1 0 0 0 u-boot.bin将u-boot.bin下载到Nand Flash。
1.通过命令sudo apt-get install minicom安装minicom。
2.通过命令ls -l /dev/ttyUSB*查找到对用的串口,未连接串口时执行一次,连接串口后再执行一次,多出就是了,我的是/dev/ttyUSB1
3.通过命令minicom -s后选择serial port setup进行串口配置,将默认的/dev/tty8改为/dev/ttyUSB1,改好后可以选择"Save setup as dfl"菜单将该设置保存为默认设置。
4.给开发板上电,就可以看到从串口输出的u-boot菜单了。
关于内核的配置编译,网上资料太多了,这里略过,uImage文件可以从网盘下载.
1.ubuntu执行命令 sudo apt-get install tftp-hpa tftpd-hpa 安装tftp服务器。
2.修改配置文件/etc/default/tftpd-hpa 中的 TFTP_DIRECTORY 为你自己的tftp目录,并将uImage放入该目录。
3.通过指令 sudo chmod 777 -R tftpboot 修改tftp目录的权限。
4.通过指令 sudo service tftpd-hpa restart 启动服务。
5.在开发板执行以下指令下载内核:
(通过在uboot执行mtdparts指令可以查看到内核分区是从0x60000开始的;0x30000000为SDRAM开始地址)
tftp 0x30000000 uImage
nand erase.part kernel
nand write.jffs2 0x30000000 0x60000 $filesize
1.通过命令 sudo apt install nfs-kernel-server 安装nfs服务端。
2.通过命令 sudo apt install nfs-common 安装nfs客户端。
3.通过命令 sudo vim /etc/exports 打开nfs配置文件。
4.在文件末尾添加 /home/ningjw/linux/root_fs *(rw,sync,no_root_squash)语句以共享root_fs目录,这里一定要设置 root_fs目录的权限为777,否则执行重启nfs命令时会出错。
5.Ubuntu 17.10 之后 nfs 默认就只支持协议3和协议4,但是 uboot 默认启动的是协议2,若想要求 nfs 支持协议 2,需要在/etc/default/nfs-kernel-server末尾加一句:RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
6.通过命令 sudo systemctl restart nfs-kernel-server 重启nfs服务器。
7.通过命令sudo mount -t nfs 192.168.1.194:/home/ningjw/linux /mnt 将linux目录挂载到mnt目录
8.此时就可以在mnt目录下看到linux目录下的文件了,也可以通过df -h命令查看挂载点。
9.使用完后可以使用命令 sudo umount /mnt 进行卸载。
1. 在minicom界面通过串口设置u-boot的ip相关参数 ,相关的3条指令如下:
set ipaddr 192.168.1.17
set serverip 192.168.1.101
set ethaddr 3c:97:0e:30:df:40
2.设置u-boot bootargs参数,相关指令如下所示,其中192.168.1.17为开发板ip地址,192.168.1.101为电脑ip地址:
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.101:/home/ningjw/linux/root_fs ip=192.168.1.17:192.168.1.101:192.168.1.255:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
3.执行saveenv保存参数后,再启动系统就是通过nfs启动文件系统了。
4.为防止电脑的ip地址变化, 通过以下方式配置静态ip
sudo vim /etc/netplan/01-network-manager-all.yaml ,用以下代码替换后,执行 sudo netplan apply 使生效
# Let NetworkManager manage all devices on this system
network:
version: 2
# renderer: NetworkManager
ethernets:
enp2s0:
dhcp4: no
addresses: [192.168.1.101/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
1.下载附件中的mkyaffs2image文件,拷贝到/home/ningjw/linux/tools目录下(该目录前面已添加到环境变量里),并修改权限。
mv mkyaffs2image /home/ningjw/linux/tools
sudo chmod +x /usr/bin/mkyaffs2image
2. 在root_fs的所在目录执行 mkyaffs2image root_fs root_fs.yaffs2
3. 在开发板执行以下命令烧录文件系统:
tftp 0x30000000 root_fs.yaffs2
nand erase.part rootfs
nand write.yaffs 0x30000000 0x460000 $filesize
4. 恢复从nand flash读取文件系统,执行指令
set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
5. 当从本地nand flash启动系统时,可以通过挂载服务器的目录来访问,例如将电脑端的workspace 挂载到 开发板的mnt目录(当然workspace的目录需要写入电脑的/etc/exports配置文件中,且workspace的权限需要改为777).
mount -t nfs -o nolock 192.168.1.101:/home/ningjw/workspace /mnt
1.下载附件中的文件,执行命令 sudo tar xzf arm-linux-gcc-4.4.3.tar.gz -C / 进行解压。
2.vim etc/profile 在文件末尾添加环境变量:
export PATH=/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH
3.执行 source /etc/profile命令,使配置生效。
4.执行arm-linux-gcc -v命令查看版本号。
1. tslib1.19官方下载链接:https://github.com/kergoth/tslib
2. 需要注意在执行.configure命令时,CC 与 CXX一定要时绝对路径,否则会报错。
sudo apt-get install autoconf automake libtool
sudo mkdir -p /usr/local/tslib
ca tslib1.19
./autogen.sh
./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++ -prefix=/usr/local/tslib
make
make install
3. 执行以上命令后,tslib安装在 /usr/local/tslib目录下 ,将制作好的 tslib 移动到我们制作的文件系统。
sudo mv /usr/local/tslib ~/root_fs/usr/local/
4. 在我们自己制作的文件系统中添加变量 vim root_fs/etc/profice
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
5. 此时tslib就已经移植好了,可以在开发板上运行usr/local/tslib/bin 目录下的文件进行测试。
1. 解压源码包 并进入目录
tar -zxf qt-everywhere-opensource-src-5.6.0.tar.gz
cd qt-everywhere-opensource-src-5.6.0.tar.gz
2. 修改配置文件 vim qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
把下面代码替换进去,至于进行了哪些修改,可自行对比原文件。
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_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=arm920t
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)
3. 创建安装目录sudo mkdir -p /usr/local/Qt5.6后,执行以下命令进行配置:
./configure -prefix /usr/local/Qt5.6 \
-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 /usr/local/tslib/include \
-L /usr/local/tslib/lib
4. 编译并安装到ubuntu18.04的/usr/local/Qt5.6文件夹下。
make -j4 && sudo make install
5. 将usr/local/Qt5.6文件夹下的libs
plugins两个文件夹,复制到根文件系统的root_fs/usr/local目录下。
6. 配置自己制作的根文件系统的环境变量 vim root_fs/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
为什么这里自己的电脑上没装Qt5.6呢?因为执行Qt5.6的安装包时报错,索性就安装最新的版本。
1.下载链接:https://download.qt.io/official_releases/qt/找到.run后缀的进行下载,该格式可以直接双击安装,我安装的是QT5.12.1版本。
2.接下来解决不能qt creator不能输入中文的问题:
sudo apt-get install fcitx-frontend-qt5
cd qt安装目录/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/
cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so .
chmod +x libfcitxplatforminputcontextplugin.so
3. 打开的我们安装好的qt creator,由于我们移植到JZ2440的是Qt5.6,所以接下来进行Qt5.6的交叉编译环境的配置。所有配置都在“工具->选项”菜单下。
step1:配置C与C++的交叉编译工具:
C++ 使用arm-none-linux-gnueabi-g++ C 使用 arm-none-linux-gnueabi-gcc
step2:在Qt Versions栏目,手动添加Qt5.6的qmake路径
step3:在Kit栏目,手动添加一个ARM-LINUX,就完成配置。这样编译出来的项目就可以在JZ2440上运行了。