嵌入式LINUX_RPI3
编译过程
用默认配置编译.
可以把交叉编译工具路径设置到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