从0开始在ubuntu18.04上搭建嵌入式Linux开发环境以及嵌入式Qt5.6开发环境

博客中提到的一些工具文件都可以在该链接中下载:https://pan.baidu.com/s/10r4kku8C0bt8vLampOyvWQ

目录

一  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 

 

首先我们需要搭建一个Linux下载百度网盘文件的环境:

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.点击百度网盘下载页面点击“导出下载->文本导出”,然后拷贝下载链接,在终端中进行执行,就可以下载文件啦。

一  Oflash软件通过openJtag下载u-boot.bin到开发板

关于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。

 

二  minicom操作u-boot界面

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菜单了。

 

三  ubuntu安装tftp服务器,开发板通过tftp下载uImage到开发板

关于内核的配置编译,网上资料太多了,这里略过,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

四 buntu18.04配置nfs

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 进行卸载。

五 boot配置通过NFS启动文件系统

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]

 

六  通过mkyaffs2image制作文件系统并通过tftp下载至开发板

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

七 安装arm-linux-gcc-4.4.3交叉编译工具

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命令查看版本号。

 

八 移植tslib1.19到JZ2440

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 目录下的文件进行测试。

九 ubuntu18.04安装交叉编译过后的Qt 5.6,并移植到JZ2440

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

十 ubuntu18.04安装Qt 5.12.1,并配置Qt5.6交叉编译环境。

为什么这里自己的电脑上没装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

从0开始在ubuntu18.04上搭建嵌入式Linux开发环境以及嵌入式Qt5.6开发环境_第1张图片

step2:在Qt Versions栏目,手动添加Qt5.6的qmake路径

从0开始在ubuntu18.04上搭建嵌入式Linux开发环境以及嵌入式Qt5.6开发环境_第2张图片

step3:在Kit栏目,手动添加一个ARM-LINUX,就完成配置。这样编译出来的项目就可以在JZ2440上运行了。

从0开始在ubuntu18.04上搭建嵌入式Linux开发环境以及嵌入式Qt5.6开发环境_第3张图片

 

你可能感兴趣的:(嵌入式linux)