Kernel(一):基础

本文详细解读了Linux内核的基础概念,包括内核驱动的重要性,驱动的工作原理,根文件系统的功能,以及模块化的优势。此外,文章还介绍了Linux内核源码结构,Kconfig和menuconfig配置工具的作用,以及编译内核的过程,特别关注了DM9000网卡的配置示例。
摘要由CSDN通过智能技术生成

        本文主要讨论210的kernel基础相关知识。

内核驱动
       
 驱动是内核中的硬件设备管理模块,工作在内核态,程序故障可能导致内核崩溃,程序漏洞会使内核不安全
        根文件系统提供根目录,进程存放在根文件系统中,内核启动最后会装载根文件系统
        应用程序不属于内核,在内核之上的用户态,受内核的限制
        模块化是内核功能模块代码此独立(不同文件夹和.c文件)的,目的是实现功能模块耦合
        模块化:可裁剪,便于编译(条件编译便于功能模块的添加和取消)和安装

linux内核源码树目录

        arch:硬件体系结构相关的代码(主)
 
        block:部分块设备驱动程序(主)
 
        crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
 
        Documentation:关于内核各部分的通用解释和注释。
 
        drivers:设备驱动程序,每个不同的驱动占用一个子目录(主)
 
        fs:各种支持的文件系统,如ext、fat、ntfs等。
 
        include:头文件。系统相关的头文件被放置在linux子目录下(主)
 
        init:内核初始化代码(注意不是系统引导代码)。
 
        ipc:进程间通信的代码。
 
        kernel:内核的最核心部分,包括进程调度、定时器等,和平台相关的一部分代码放在arch/*/kernel目录下(主)
 
        lib:库文件代码(主)
 
        mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下(主)
 
        net:网络相关代码,实现了各种常见的网络协议(主)
 
        scripts:用于配置内核文件的脚本文件。
 
        security:主要是一个SELinux的模块。
 
        sound:常用音频设备的驱动程序等。
 
        usr:实现了一个cpio(文件备份程序及文件格式)。

        firmware:固件代码(210的iROM代码)

        tools:工具

        virt:内核虚拟化相关

        Kbuild:linux内核特有内核编译体系文件(主)

        Makefile:主makefile(主)

        Kconfig内核配置体系文件(主)

内核配置原理
      
  make xx_defconfig和make menuconfig用于生成.config文件
        make xxx_defconfig生成大部分配置项,make menuconfig用于其他配置项生成
        .config文件在内核在编译过程中读取,指导编译链接过程
        make x210ii_qt_defconfig即为拷贝arch/arm/configs/x210ii_qt_defconfig为.config
        make menuconfig中的每个选择项对应.config的配置项

make menuconfig原理和操作

        原理

                menuconfig是linux内核图形化界面配置
                ncurses库用于实现文字图形界面
                scripts\kconfig\lxdialog目录为menuconfig源代码

        操作

                /:查找  

                ?:帮助信息

                 --->:有子菜单的

                 高亮字母:快捷键

                Y:编入内核

                N:不编译

                M:编入模块(.ko文件)

                []:可模块化

                <>:可模块化

                *:编入内核

                空白:不编译


menuconfig读取Kconfig文件

        menuconfig菜单由内核源码各个目录的Kconfig文件支持
        Kconfig文按格式包含各配置项,make menuconfig会生成对应的菜单项
        menuconfig中菜单目录结构和源码目录Kconfig目录结构相同
        make menuconfig修改保存及修改保存的为.config文件
        menuconfig读取和写入.config文件对应的配置(CONFIG_xxx=y,CONFIG_xxx=m,n则被#号注释)


Kconfig文件

        menuconfig程序可Kconfig文件格式,读取信息组成菜单项
        #开头是注释行,menuconfig功能菜单有配置项,config功能菜单无配置项
        menuconfig或config后的参数XXX(如NETDEVICES) 为配置项名,CONFIG_XXX为.config中定义的配置项
        menuconfig下的config为他的子菜单
        Kconfig会source子目录Kconfig保证Kconfig下可包含menuconfig中
        linux内核模块功能文件夹添加:文件夹下创建Kconfig,上层目录Kconfig中source引入文件夹下的Kconfig
        tristate(包含Y、N、M编译方式),bool(包含Y、N编译方式)
        depends on XXX为依赖配置项(类似ifdefine),依赖.config配置文件中的配置项(CONFIG_xxx=x),配置项为Y/M/N,N无意义,
        help为帮助信息(?==kconfig的---help---内容)

 

文件关系

        menuconfig和.config:make menuconfig会读取或修改.config配置值(y/m,n为#注释)
        menuconfig和Kconfig:Kconfig为menuconfig菜单内容,修改Kconfig可修改(增删改)menuconfig菜单内容
        menuconfig和Makefile:Makefile依据menuconfig修改后的.config的功能配置(y,m,#)决定内核成zImage是否包含该功能或生成功能模块(.ko)
        Kconfig和.config文件和Makefile:Kconfig决定menuconfig的内容,menuconfig可修改.config文件,.config文件中配置项决定Makefile是否编译功能(模块或编进内核)
        网卡DM9000:Kconfig(.config中CONFIG_ARM=y ==> depends on ARM || BLACKFIN || MIPS)==>menuconfig(DM9000 support:Y、N、M)==>.config(CONFIG_DM9000=y)==>(obj-$(CONFIG_DM9000) += dm9000.o)

            网卡DM9000:配置文件图例    

           .config      

         kernel/drivers/net/Kconfig

         .config

 

        Makefile

demo:

        内核配置和编译(210已烧录uboot,ubuntu已搭建tftp)

安装ncurses库(make menuconfig需要)

apt-get install libncurses5-dev -y

修改交叉编译工具链

vim Makefile

CROSS_COMPILE   ?= /root/arm-2009q3/bin/arm-none-linux-gnueabi-

清除编译

make distclean

生成配置文件(.config)

make x210ii_qt_defconfig

编译

make -j4

编译完后得到内核镜像在zImage(arch/arm/boot),可烧录

cp kernel/arch/arm/boot/zImage ~/tftp

        烧录结果:

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值