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 <--内核镜像