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

树莓派/RaspberryPi 内核编译的更多相关文章

  1. 树莓派/RaspberryPi 内核源码下载

    树莓派的源码有两种下载方式:压缩包下载和git clone指令下载. 1.压缩包下载 选择对应分支,点击Github界面的 下载按钮即可,如下图: 测试发现,同样的分支,用压缩包方式下载后编译会出错, ...

  2. RaspBerry Pi3 ~ 内核编译

    RaspBerryPi3-内核编译 转载注明出处:http://www.cnblogs.com/einstein-2014731/p/5985128.html 在有道云笔记的同步分享:http://n ...

  3. 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程

    实验环境:Ubnuntu 64位(推荐使用14.04)+Xshell 阿里云现在提供的云服务器很好用的,用来编译内核性能也不错.本文介绍最基本的内核编译方法,为了方便,所有操作均在root用户下进行. ...

  4. zju(3)内核编译与运行

    1.实验目的 学习和掌握Linux配置和编译的基本步骤. 二.实验内容 1. 对Linux内核及用户程序进行配置: 2. 编译生成内核映像文件: 3. 把编译的映像文件烧写到FLASH中,查看运行结果 ...

  5. linux内核编译,配置本机驱动

    1.前言  编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多 ...

  6. linux内核编译相关

    参考:http://www.arm.linux.org.uk/docs/kerncomp.php 一. 内核编译1) linux 2.4make clean/make mrpropermake dep ...

  7. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  8. 【转】内核编译时, 到底用make clean, make mrproper还是make distclean(转载)

    原文网址:http://dongyulong.blog.51cto.com/1451604/449470 内核编译时, 到底用make clean, make mrproper还是make distc ...

  9. linux 驱动模块 内核编译环境

    目录(?)[+] Linux设备驱动Hello World程序介绍 如何编写一个简单的linux内核模块和设备驱动程序.我将学习到如何在内核模式下以三种不同的方式来打印hello world,这三种方 ...

随机推荐

  1. 同时执行2个存储过程,2个SP中分别有相同的临时表名,会有冲突吗?

    同时执行2个存储过程,2个SP中分别有相同的临时表名,会有冲突吗?答案:不会 这就可以在以后写存储过程的时候统一临时表名了. alter procedure sp_01 as begin create ...

  2. Linux环境下的编译,链接与库的使用

    参考博客: http://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html http://m.blog.csdn.net/article/ ...

  3. ExtJS 等待两个/多个store加载完再执行操作的方法

    ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架. Extjs加载Store是异步加载的,这有很多好处.但是当我们要在两个或多个不同的store加载完再执行一些操作 ...

  4. windows CE 6.0编译报BLDDEMO: There were errors building MY283错误解决办法

    今天开始正式进入windows ce程序开发. 第一次编译windows ce6.0的系统,25分钟编译后报:BLDDEMO: There were errors building MY283 错误. ...

  5. 浅谈dynamic的简单使用用法

    今天看了博客园里面的dynamic用法,我犹豫从来没接触过,今天恶补了一下,把我对dynamic的认识分享了出来,大家一起学习. Visual C# 2010 引入了一个新类型 dynamic. 该类 ...

  6. python 网络编程-TCP/UDP

    摘抄自:廖雪峰的官方网站:http://www.liaoxuefeng.com/ TCP客户端和服务器端代码: #coding=utf-8 #客户端程序TCP 连接 import socket s=s ...

  7. it小小鸟心得

    本来打算就这么浑浑噩噩的过完我的大学四年生涯,但当我读完这本书,改变了我的想法.许多人说大学是最美好的,确实,在这里,我每天都不用认真听讲,不用准时去上课,可是久而久之,自己有感而发觉得这样碌碌无为下 ...

  8. UVALive - 6955 Finding Lines 随机算法

    题目链接: http://acm.hust.edu.cn/vjudge/contest/126968#problem/F 题意 给你n个点,问是否有>=p/100*n个点共线(p>=20& ...

  9. Poj 1222 EXTENDED LIGHTS OUT

    题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...

  10. matrix_last_acm_3

    the first CCPC   password 123 A http://acm.hust.edu.cn/vjudge/contest/view.action?cid=97380#problem/ ...