学习嵌入式Linux开发——建立交叉编译工具链并编译内核

韦东山-Firefly RK3288配置交叉编译环境教程
Firefly-RK3288官方的配置交叉编译环境教程在资源下载-文档-《RK3288开发板Linux开发手册》2.2

概述

我是主要按照嵌入式Linux应用开发完全手册第 2 版进行学习的。在按照开发手册一步一步搭建开发环境的过程中还是遇到很多问题,下面我会一一讲到。作为初学者,光一个搭建开发环境编译内核就花了我四五天的时间了,中间换了几个虚拟机,从firefly官方教程到韦东山出的教程我都跟着尝试了,个人感觉他们给的教程中好像有很多步骤都省略了,按教程步骤走就没成功过,明明输入的是一样的指令但是我这边总会出现各种各样的问题,而且有很多地方都语焉不详,着实让人摸不着头脑,可以说对新手极不友好了(不排除是因为我菜)。下面就有我这条菜狗来总结一下搭建RK3288开发环境的详细步骤,我能保证至少我能看懂(笑)。

准备

下载和自己开发板对应的BSP包:

韦东山版

韦东山开发板资料
韦东山版的源码在升级版全系列嵌入式视频第1季之快速入门 密码:6FJk找到自己开发板对应的文件夹,建议将整个文件夹下载下来里面有很多东西以后要用到。
在这里插入图片描述

Firefly版

Firefly-RK3288官方资料下载这里要注意的是在firefly官网下载的sdk包要复制到Ubuntu虚拟机后再进行一次编译得到的才是完整源码在这里插入图片描述可以直接下载韦东山给出的Firefly源码BSP包 密码:SVdn这里面的Linux3288-sdk是firefly完整的源码,解压后:
在这里插入图片描述
建议下载韦东山的,下面教程使用的是韦东山的

注意

韦东山的SDK包和Firefly官方的SDK包储存结构是不一样的:

交叉编译链 内核
韦东山 100ask_firefly-rk3288\ToolChain 100ask_firefly-rk3288\linux-4.4
Firefly linux-sdk\prebuilts linux-sdk\kernel

要用到的软件

FileZilla

作用:虚拟机和电脑互传文件
FileZill下载

虚拟机

Ubuntu16.04的虚拟机(我用的,其他版本不知道会是个啥情况)

安装过程

开始安装前重启一下虚拟机,打开终端

安装前置软件包

Ubuntu 16.04 软件包安装:

sudo apt-get install git gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools \
parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools libssl-dev \
autotools-dev libsigsegv2 m4 libdrm-dev curl sed make binutils build-essential gcc g++ bash \
patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libglib2.0-dev openssh-client lib64stdc++6

ARM 交叉编译工具链和编译内核相关软件包:

sudo apt-get install gcc-arm-linux-gnueabihf \
gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev \
libssl1.0.0 libssl-dev

安装 mkbootimg 工具

git clone https://github.com/neo-technologies/rockchip-mkbootimg.git
cd rockchip-mkbootimg
make && sudo make install

这是很多软件包,一下装完,后面就
如果没有装到后面年以内和的时候会出错

获取内核源码和交叉编译工具链源码

将已经下载好的源码通过FileZilla复制到 /home/用户目录,可以先解压在复制也可以先复制在解压。
FileZilla使用方法:先确定虚拟机的联网方式是Net模式联网,在虚拟机输入指令ifconfig获取虚拟机网络地址inet addr在这里插入图片描述连接上之后左边选中100ask_firefly-rk3288右边选中用户家目录:在这里插入图片描述
下面的基本按照《嵌入式Linux应用开发完全手册第 2 版》第三篇做就行了,下面大部分是直接从《嵌入式Linux应用开发完全手册第 2 版》中复制的。

配置交叉编译工具链

设置交叉编译工具链

交叉编译工具链主要是用于在 ubuntu 主机上编译并声称可以在其它平台上运行的系统。
设置交叉编译工具主要是设置 PATH, ARCH 和 CROSS_COMPILE 三个环境变量,下面介绍具体设置方法一次设置永久生效:
修改用户配置文件, Ubuntu 系统下,修改如下:

vim ~/.bashrc

在行尾添加或修改:第二行路径根据自己的文件名修改

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihfexport PATH=$PATH:/home/用户名/100ask_firefly-rk3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin

测试交叉编译工具链

测试环境变量:

输入:source ~/.bashrc
输入:echo $ARCH
输出:arm
输入:echo $CROSS_COMPILE
输出:arm-linux-gnueabihf-

测试交叉编译器:

输入:arm-linux-gnueabihf-gcc -v
输出:Using built-in specs.
...
gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9)

编译内核

解压 kernel 源码

如果是本地上传代码到 Ubuntu,则进入 Kernel 目录,解压内核源码:

book@100ask:~$ cd /home/book/100ask_firefly-rk3288/
book@100ask: ~/100ask_firefly-rk3288$ tar -zxvf linux-4.4.tar.gz

注意:如果你使用的是 repo 在线同步代码,则不需要上面的解压步骤

编译内核

注意:需要先安装交叉编译工具链,设置环境变量。
不同的开发板对应不同的配置文件,配置文件位 linux4.4/arch/arm/configs/目录,下

book@100ask:~/100ask_firefly-rk3288$ cd linux-4.4
book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make mrproper
book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make 100ask_firefly-rk3288_defconfig
book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make zImage
book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make dtbs

编译完成后,在 arch/arm/boot 目录下生成 zImage 文件, 在 arch/arm/boot/dts 目录下生成
rk3288-firefly.dtb 设备树的二进制.dtb 文件

Firefly版

使用Firefly给出的SDK包安装只需要将交叉编译工具链的路径改一下,最后指向bin文件夹,编译内核的时候在kernel这个文件夹中进行编译就行了。

原创文章 9 获赞 1 访问量 602

猜你喜欢

转载自blog.csdn.net/hengxing666/article/details/105578868