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

2019-07-12 21:09发布

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

                                                                            {MOD}部分文件说明 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下载百度 {MOD}文件的环境:

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

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

关于u-boot的移植,网上资料太多了,这里略过,u-boot.bin文件可以从 {MOD}下载. 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文件可以从 {MOD}下载. 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 step2:在Qt Versions栏目,手动添加Qt5.6的qmake路径 step3:在Kit栏目,手动添加一个ARM-LINUX,就完成配置。这样编译出来的项目就可以在JZ2440上运行了。