系统环境介绍

环境v1.0(踩坑)

目标机器:树莓派4b,raspbian(buster)
本地主机:Win7+vmware15, raspbian(buster) for pc
**
考虑到主机尽量和目标机采用相同环境(内核和操作系统)以减少移植过程中带来的麻烦,所有主机优先考虑了树莓派官方提供的raspbian(buster) pc版,https://www.raspberrypi.org/downloads/raspberry-pi-desktop/
image.png

开始使用才发现,树莓派官方提供的 raspbian for pc虽然是64bit系统,但是上面的软件(gcc系列)和libs(/lib,/usr/lib)全部都是32bit的
image.png

/lib和/usr/lib,没有找到/lib64和/usr/lob64目录
image.png

image.png

但是从树莓派官方仓库下载的交叉编译工具链推荐的默认是64bit版本
image.png

尝试一:使用推荐的arm-rpi-4.8.4-linux-gnueabihf作为交叉编译器

image.png

查资料提出说要安装一些对应的32库,考虑一下不应该是缺32库,应该是缺64库,所以修改如下:

  1. apt-get install lib64ncurses6 lib64z1 lib64stdc++6
arm-linux-gnueabihf-gcc hello.c

image.png
编译成功。

尝试二:使用32bit交叉编译器

raspberrypi/tools中提供了 gcc-linaro-arm-linux-gnueabihf-raspbian编译器,它是32bit
image.png
编译成功。

环境v2.0(正式)

总感觉32bit gcc和库对应64bit交叉编译器有点问题,打算换成其他的debian64发行版(比如ubuntu),使用真正的64bit系统。
目前还没有精力去下载,先用上述版本。

交叉编译工具链

# 0. enter the /home/pi
cd ~

# 1. download the crosscompile tools.
git clone git@github.com:raspberrypi/tools.git

# 2. move to /opt
sudo mv tools /opt/tools-master

# 3. add the enviroment variables
sudo vim /etc/profile.d/cc-extra-env.sh

######################## cc-extra-env.sh 文件内容开始 ####################
#!/bin/bash

PATH=$PATH:/opt/tools-master/arm-bcm2708/arm-linux-gnueabihf/bin
export PATH
######################## cc-extra-env.sh 文件内容结束 ####################

# 4. reboot
sudo reboot

编译内核

下载内核源码并解压

git clone https://github.com/raspberrypi/linux.git

或者手动下载并解压

unzip linux-rpi-4.19.y.zip
cd linux-rpi-4.19.y

尝试第一次编译(什么都不改)

修改Makefile设置目标平台和交叉编译器

ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-

通过makemenuconfig查看其他设置

make menuconfig

提示需要的几个库找不到,缺什么装什么

sudo apt-get install libncurses-dev bison flex

成功进入make menuconfig配置 界面
image.png
什么都不改,选择Exit退出。

使用内核提供的bcm2711_defconfig进行配置(树莓派4bmcu是bcm2711)

make bcm2711_defconfig

开始编译(编译时间较长,可以开启一个screen进行编译)

screen -S k1
make –j4 zImage modules dtbs

参数-j可利用多线程加快编译速度,一般设置为核心数的1.5倍 make -j4 代表4个命令同时执行,如果是单核处理器不用加j,多核可以使用j4,j8等以提高cpu使用效率 zImage算是最终内核镜像的半成品,modules是内核模块,dtbs作用于/boot,应该与树莓派加电启动有关,类似BIOS

中间有一些缺少的库,缺什么装什么即可

----- openssl/bio.h: No such file or directory ----
sudo apt-get install libssl-dev

编译结束:
image.png