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

推荐订阅源

T
Tailwind CSS Blog
The GitHub Blog
The GitHub Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
量子位
Martin Fowler
Martin Fowler
月光博客
月光博客
P
Proofpoint News Feed
博客园_首页
Y
Y Combinator Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
H
Help Net Security
U
Unit 42
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 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