樹莓派/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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM