系统环境介绍
环境v1.0(踩坑)
目标机器:树莓派4b,raspbian(buster)
本地主机:Win7+vmware15, raspbian(buster) for pc
**
考虑到主机尽量和目标机采用相同环境(内核和操作系统)以减少移植过程中带来的麻烦,所有主机优先考虑了树莓派官方提供的raspbian(buster) pc版,https://www.raspberrypi.org/downloads/raspberry-pi-desktop/
开始使用才发现,树莓派官方提供的 raspbian for pc虽然是64bit系统,但是上面的软件(gcc系列)和libs(/lib,/usr/lib)全部都是32bit的
/lib和/usr/lib,没有找到/lib64和/usr/lob64目录
但是从树莓派官方仓库下载的交叉编译工具链推荐的默认是64bit版本
尝试一:使用推荐的arm-rpi-4.8.4-linux-gnueabihf作为交叉编译器
查资料提出说要安装一些对应的32库,考虑一下不应该是缺32库,应该是缺64库,所以修改如下:
apt-get install lib64ncurses6 lib64z1 lib64stdc++6
arm-linux-gnueabihf-gcc hello.c
编译成功。
尝试二:使用32bit交叉编译器
raspberrypi/tools中提供了 gcc-linaro-arm-linux-gnueabihf-raspbian编译器,它是32bit
编译成功。
环境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配置 界面
什么都不改,选择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
编译结束: