惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
B
Blog
J
Java Code Geeks
T
Tailwind CSS Blog
腾讯CDC
A
About on SuperTechFans
GbyAI
GbyAI
H
Help Net Security
IT之家
IT之家
L
LangChain Blog
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
博客园 - 叶小钗
小众软件
小众软件
I
InfoQ
爱范儿
爱范儿
有赞技术团队
有赞技术团队
博客园 - 司徒正美
博客园 - 【当耐特】
Jina AI
Jina AI
D
Docker

博客园 - sudochen

linux kernel format nand for ubifs ipq95xx rdp433 烧写运行openwrt25 git多用户管理 以太网EthernetII,LLC,SNAP判断 命令行获取公网IP地址 免密SSH登录Openwrt 研发管理的一般流程 haserl repo error with python3.10 on ubuntu22.04 京东AX3000后裔刷机 UTF-8 ebtables Ubuntu建立samba共享目录 linux文件的时间 IP优先级TOSDSCP SFP光模块定义 i2ctools工具使用 I2C协议 SPI协议 免费ARP FEM介绍 notepad++每两个字符添加一个空格
linux内核Makefile和busybox编译
sudochen · 2024-05-16 · via 博客园 - sudochen

刚开始学习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