4、RK3399J Linux分步编译Buildroot固件

1、配置交叉编译工具链

0、搭建编译环境

sudo apt-get install expect-dev repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler \
gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools \
linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make \
binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget \
libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client \
subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo \
liblz4-tool genext2fs lib32stdc++6 expect

(1)、永久生效

如需永久修改,请修改用户配置文件, Ubuntu 系统下,修改如下:

vim ~/.bashrc

在行尾添加或修改:

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-
linux-gnu/bin

(2)、测试交叉编译工具链

3.2.2 3.2.2 测试交叉编译工具链 测试交叉编译工具链
测试环境变量:

book@100ask:~$ echo $ARCH
arm64
book@100ask:~$ echo $CROSS_COMPILE
aarch64-linux-gnu-

测试交叉编译器:

book@100ask:~$ aarch64-linux-gnu-gcc -v
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201002144028753.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE4MDc3Mjc1,size_16,color_FFFFFF,t_70#pic_center)

2、解压编译 bootloader


不同的开发板对应不同的配置文件,配置文件位于 u-boot 的 configs/ 目录,下面以 Roc-rk3399-pc 开
发板为例,说明 u-boot 的编译过程:

```go
book@100ask:~$ cd ~/100ask_roc-rk3399-pc/uboot2019.01
book@100ask: ~/100ask_roc-rk3399-pc/uboot2019.01$ make distclean
book@100ask: ~/100ask_roc-rk3399-pc/uboot2019.01$ make firefly-rk3399_defconfig
book@100ask: ~/100ask_roc-rk3399-pc/uboot2019.01$ make
book@100ask: ~/100ask_roc-rk3399-pc/uboot2019.01$ ./make.sh trust
book@100ask: ~/100ask_roc-rk3399-pc/uboot2019.01$ ./make.sh uboot
book@100ask: ~/100ask_roc-rk3399-pc/uboot2019.01$ ./make.sh loader

如下图 3.2.2.1 所示,生成的供 roc-rk3399-pc 启动uboot 的镜像文件。
在这里插入图片描述

3、编译 linux kernel

不同的开发板对应不同的配置文件,配置文件位内核源码arch/arm/configs/目录。下面以Roc-rk3399-
pc 开发板为例,说明 kernel 的编译过程:

book@100ask:~/100ask_roc-rk3399-pc$ cd linux-4.4
book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make mrproper
book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make firefly_linux_defconfig
book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make Image
book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make dtbs

编译完成后,在 arch/arm/boot 目录下生成 Image 文件, 在 linux-4.4/arch/arm64/boot/dts/rockchip 目录下生成设备树的二进制 rk3399-firefly.dts 文件。
编译内核模块

book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make  modules

安装内核模块到 nfs 根文件系统

book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ sudo make INSTALL_MOD_PATH=/media/rootfs modules_install

4、 构建根文件系统

编译系统
下面以 100ask_roc-rk3399-pc_defconfig 配置文件为例,说明 buildroot 的配置编译过程:

扫描二维码关注公众号,回复: 11847044 查看本文章
book@100ask:~/100ask_roc-rk3399-pc$ cd buildroot2018.02
book@100ask:~/100ask_roc-rk3399-pc/buildroot2018.02$ make clean
book@100ask:~/100ask_roc-rk3399-pc/buildroot2018.02$ make 100ask_roc-rk3399-pc_defconfig //拷贝RK3399-PC上韦东山的
book@100ask:~/100ask_roc-rk3399-pc/buildroot2018.02$ make menuconfig
book@100ask:~/100ask_roc-rk3399-pc/buildroot2018.02$ make –jN  /* N表示CPU的线程数,比如可以写4、8
等以加快编译速度,这里编译很慢,可以都需要12个小时,因为是国外的服务器 */
//编译慢可以执行下export FORCE_UNSAFE_CONFIGURE=1

3.5.4 3.5.4 镜像文件 镜像文件
编译成功后文件输出路径为 output/images

buildroot2018.02
├── output
├── images 
├── idbloader.img <--u-boot镜像
├── rootfs.tar.gz nfs_rootfs  <--打包并压缩的根文件系统,适用于NFSROOT启动
├── rk3399-roc-pc.dtb <--设备树文件
├── rootfs.ext2
├── rootfs.ext4 -> rootfs.ext2 <--ext2格式根文件系统
├── rootfs.tar  <--打包后的根文件系统
├── sdcard.img <--完整的SD卡系统镜像
├── trust.img  <--u-boot镜像
├── u-boot.bin
├── u-boot-dtb.img
├── uboot.img <--u-boot镜像
└── zImage  <--内核镜像

猜你喜欢

转载自blog.csdn.net/qq_18077275/article/details/108901916