• 树莓派/RaspberryPi 内核编译


    1.获取所需源码

    1)下载地址:

    官方网址:https://github.com/raspberrypi

    上面列出了树莓派所有的开源软件:

    1. linux:内核源码
    2. tools:编译内核和其他源码所需的工具——交叉编译器等

    我们只需要以上两个文件即可,下面的工程可以了解一下

    1. firmware:树莓派的交叉编译好的二进制内核、模块、库、bootloader
    2. documentation:树莓派离线帮助文档,教你如何使用、部署树莓派(树莓派官方使用教程)
    3. userland:arm端用户空间的一些应用库的源码——vc视频硬浮点、EGL、mmal、openVG等
    4. hats:Hardware Attached on Top,树莓派 B+型板子的扩展板资料
    5. maynard:一个gtk写成的桌面环境
    6. scratch:一个简易、可视化编程环境
    7. noobs:一个树莓派镜像管理工具,他可以让你在一个树莓派上部署多个镜像
    8. weston:一个应用程序
    9. target_fs:树莓派最小文件系统,使用busybox制作
    10. quake3:雷神之锤3有线开发源码firmwareb

    2)下载方法:

    git clone https://github.com/raspberrypi/tools
    git clone --depth=1 https://github.com/raspberrypi/linux
    

     具体见:http://www.cnblogs.com/qiengo/p/5888559.html

    2.配置交叉编译环境

      root@ubuntu:......./tools/arm-bcm2708# ls

    arm-bcm2708hardfp-linux-gnueabi 
    arm-bcm2708-linux-gnueabi 
    arm-rpi-4.9.3-linux-gnueabihf 
    gcc-linaro-arm-linux-gnueabihf-raspbian 
    gcc-linaro-arm-linux-gnueabihf-raspbian-x64
    

       32系统将如下路径加入环境变量:

    /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian

    /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

    64系统将如下路径加入环境变量:

    /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

    修改/etc/profile文件即可,完成后source /etc/profile,然后终端输入arm-linux后双击Tab有指令提示说明添加成功

    3.编译、提取内核及其模块

    1)配置内核,配置makefile的ARCH类型和编译器路径

    可以直接修改内核根目录的Makefile文件,修改下面的这两行

      ARCH  ?=$(SUBARCH)

      CROSS_COMPILE ?=$(CONFIG_CROSS_COMPILE:"%"=%)

    但是从这两行上面的注释可以看出,可以直接使用make指令设置这两个参数,make ARCH =arm CROSS_COMPILE=arm-linux- ......

      执行find ./ -name "*bcm*defconfig*" 查找下对应的默认配置,只保留arm下的结果:

      ./arch/arm/configs/bcm2835_defconfig
      ./arch/arm/configs/bcmrpi_defconfig
      ./arch/arm/configs/bcm2709_defconfig
      ./arch/arm/configs/bcm_defconfig 
    

       Pi 1 使用bcmrpi_defconfig

       Pi 2/3 使用bcm2709_defconfig

    执行指令

    $ cd ....../linux-rpi-4.4.y
    $ KERNEL=kernel7
    $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

     配置内核模块,执行

      make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

      如下图所示,顶部显示arm,说明参数设置成功

     

    2)编译内核镜像

    $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

    如果是多处理系统可以添加选项-jn ,n为数字,表示多处理器的数量*1.5。可以加快编译速度
    $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs

    4.升级内核及文件系统

    将树莓派的SD卡插在Linux系统电脑上,最好直接使用读卡器,使用lsblk指令对比插入前后的变化,可以sd中的两个分区如下:

    lsblk
    

     

    mmcblk0p1是FAT(boot)分区

    mmcblk0p2是ext4文件系统(root)分区

    挂载SD卡分区:

    mkdir mnt/fat32
    mkdir mnt/ext4
    sudo mount /dev/mmcblk0p1 mnt/fat32
    sudo mount /dev/mmcblk0p2 mnt/ext4
    

     安装modules:

    sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
    

    如果把INSTALL_MOD_PATH设为本地目录可以提取出对应的modules,最后,把kernel and Device Tree blobs复制到SD卡:

    sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img       //备份原先的img文件
    sudo scripts/mkknlimg arch/arm/boot/zImage mnt/fat32/$KERNEL.img //将zImage格式转成树莓派需要的img格式,并复制到SD卡
    sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
    sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
    sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
    sudo umount mnt/fat32
    sudo umount mnt/ext4
    

    升级内核的另一个办法是将img文件复制到相同目录下,使用不同的文件名,如 kernel-myconfig.img,然后修改boot目录下的config.txt文件,加入:

    kernel=kernel-myconfig.img
    

     最后,将SD卡插入树莓派启动。

    Ref:https://www.raspberrypi.org/documentation/linux/kernel/building.md

  • 相关阅读:
    Sqlite—修改语句(Update)
    Python—图形界面开发
    Django—模型
    Sqlite—删除语句(Delete)
    Shell—详解$( )、$(( ))、``与${ }的区别
    Shell—详解$0、$1、$2、$#、$*、$@、$?、$$变量
    排名靠前的博客
    系统架构--逻辑层
    互联网系统的通用架构笔记
    各类开源协议总结
  • 原文地址:https://www.cnblogs.com/qiengo/p/5284168.html
Copyright © 2020-2023  润新知