linux内核Makefile和busybox编译
刚开始学习Linux时的一些记录
linux内核配置体验
- 在arch/arm/configs/目录下面找到相似的配置文件,其名称一般为xxx_defconfig
- make xxx_defconfig
- make menuconfig配置你的内核,
- 配置完成后生成 .config文件在TOPDIR,该文件由于是以‘.’开头,故在linux下是 一个隐藏的文件。
生成的配置信息如 CONFIG_XXX,如CONFIG_DM9000,其可能出现的位置如下
- c源代码,条件编译
- Makefile以及子目录的Makefile,形如objs-$(CONFIG_DM9000) += dm9000.o
- include/config/auto.conf,包含于顶层Makefile中。
- include/linux/autoconfig.h,包含于某个C文件的头文件中,
以上的这些信息都来自于.config文件
注:无论在make menuconfig的时候将CONFIG_XXX选中为’m’ or ‘ y’在autoconf.h都定义为1,m和y的差别区别在于子目录下的Makefile
linux Makefile分析
- 顶层Makefile,生成配置文件.config,生成内核
- arch/$(ARCH)/Makefile,架构相关的Makefile
- srcript/Makefile.*和Makefile
a.c b.c
y:表示编译进内核
obj-y += a.o b.o
m:表示编程为模块
obj-m += ab.o
vmlinux:$(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) \
$(kallsyms.o) FORCE
vmlinux-init := $(head-y) $(init-y)
vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
vmlinux-all := $(vmlinux-init) $(vmlinux-main)
vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds
head-y在arch/$(ARCH)/Makefile里面定义
head-y := arch/$(ARCH)/kernel/head_$(MMU_TEXT).o \
arch/$(ARCH)/kernel/init_task.o
init-y := init/
init-y := $(patsubst %/,%/build-in.o,$(init-y))
core-y := usr/ kernel/ mm/ fs/ ipc/ security/ crypto/ block/
core-y := $(patsubst,%/,%/build-in.o,$(core-y))
lib-y := lib
lib-y := lib/lib.a lib/build-in.o
driver-y := driver/ sound/
net-y := net/build-in.o
BusyBox编译安装体验
配置
- make menuconfig
- Busybox Setting->Build Option->选择编译为动态链接还是静态链接
- Install Option->选中Don’t use/usr
- Busybox install prefix(xxx/rootfs)
- make就会在xxx/rootfs生成
注:在编译的过程中可能出现的错误,
- 编译工具有没有库,b,将出错的地方利用menuconfig不进行编译
制作基本文件系统
- mkdir rootfs
- cd rootfs;mkdir bin sbin dev etc usr mnt var sys and so on.
- mknod –m 600 console c 5 1
mknod –m 600 null c 1 3
4, 安装rootfs/etc文件
5, 编译内核模块,在内核源文件目录make modules ARCH=XXX CROSS_COMPILE=XXX-XXX-
安装内核模块,
make modules_install ARCH=XXX INSTALL_MOD_PATH=rootfs/lib/modules
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-05-16 qsdk编译,make menuconfig 出问题