编译过程

用默认配置编译.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git clone --depth=1 https://github.com/raspberrypi/linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcm2709_defconfig
make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -j4 zImage modules dtbs
sudo make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
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/

可以把交叉编译工具路径设置到PATH(每次使用都要设置):

$export PATH=$PATH:/xxxxx/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

为了方便. 可以设置环境变量/etc/environment里设置PATH
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin:/xxxxx/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin”

  • 如果需要配置编译选项,最好安装ncurses. 图形化配置的时候需要它.”make menuconfig”
  • 如果要编译自己的交叉编译工具. 参考crosstool

编译解析

  • 顶层MAKEFILE 是所有MAKEFILE文件的核心. 从总体上控制内核编译.
  • .config 配置文件, 由第一次执行bcm2709_defconfig 生成. 所有的MAKEFILE都是根据.config来决定使用哪些文件 包含类似CONFIG_PLAT_SUNXI 这种参数
  • arch/arm/Makefile 对应体系(arm/i386)的Makefile.用来决定哪些体系结构相关的文件参与内核的生成.
  • scripts/Makefile Makefile共用的通用规则,脚本等.
  • kbuild Makefiles 各级子目录下的Makefile 它们相对简单, 被上一层Makefile调用来编译当前目录下的文件 .

/arch/arm/Kconfig 定义了自编译内核配置文件 Kconfig会被MAKEFILE调用生成内核.
CONFIG_PLATSUNXI
在调用的时候会省略CONFIG
. 变成PLAT_SUNXI
config PLAT_SUNXI

内核启动过程

  • bootloader
  • head.o 从bootloader接过控制权

编译内容

  • init main mounts init_task
  • arch/arm/vfp
  • arch/arm/vdso
  • arch/arm/kernel
  • arch/arm/mm
  • arch/arm/common
  • arch/arm/probes
  • arch/arm/net
  • arch/arm/crypto
  • arch/arm/firmware
  • arch/arm/mach-bcm
  • kernel
  • kernel/bpf
  • kernel/debug
  • kernel/events
  • kernel/irq
  • kernel/locking
  • kernel/power
  • kernel/printk
  • kernel/rcu
  • kernel/sched
  • kernel/time
  • kernel/trace
  • mm
  • fs
  • fs/9p
  • fs/autofs4
  • fs/btrfs
  • fs/cachefiles
  • fs/cifs
  • fs/configfs
  • fs/debugfs
  • fs/devpts
  • fs/dlm
  • fs/ecryptfs
  • fs/exportfs
  • fs/ext4
  • fs/f2fs
  • fs/fat
  • fs/fuse
  • fs/gfs2
  • ….
  • ipc
  • security/keys
  • crypto
  • block
  • drivers/base
  • drivers/block
  • drivers/bluetooth
  • drivers/char
  • drivers/cdrom
  • drivers/bus
  • drivers/clk clocksource connector cpufreq dma extcon firemware gpio gpu hid i2c iio input irqchip leds md mailbox media net
  • sound
  • net ipv4 ipv6 netfilter wireless …
  • arch/arm/lib
  • lib
  • arch/arm/boot

留言