内核分析笔记

1、linux 内核基本概念-上
     linux 内核 和 linux 操作系统的区别
     linux 内核 : 通常指的是由官网下载下来的源码 编译出来的 uImage 或者 zImage 镜像
                    启动中包含的由 硬件抽象层、文件系统、进程调度、网络管理、驱动管理、内存管理(多任务)等功能。
     通常我们使用的 linux 系统 是指: 像 Ubuntu 等操作系统。 包含linux 内核, 工具集,各种第三方库,
                    图形界面,应用程序的一个发布包(发行版)
     
     linux 内核特性
            免费开源
            可移植性 支持广泛的硬件平台
                arm ppc mips x86...
            扩展性
                软硬件可裁剪
            高可靠性、稳定性
            网络功能强大
            多任务、多用户系统
            模块化设计
     linux 内核版本
        采用 A.B.C.D 
            A 主版本号 
            B 次版本号 为偶数表示 稳定版本 奇数为开发中版本
            C 表示linux的发行版本号
            D 表示更新版本号

    linux 内核包含的五大功能:
        1. 进程管理
        2. 内存管理
        3. 文件系统
        4. 网络协议
        5. 设备驱动管理
        linux 不会是一个真正的实时系统 (时间片轮转方式)
        vxwork 是一个真正的实时(RTOS )系统 收费
        
    linux 分层
        
         应用程序
            ||
            \/
         系统调用
            ||
            \/
         linux 内核  分为 平台无关码 和 平台相关码
            ||
            \/
         硬件平台
        
    linux 内核 下载地址  https://www.kernel.org/
    linux 各个版本下载地址 https://www.kernel.org/pub/linux/kernel/
        编译内核 make uImage 
        编译设备树 make dtbs
        上面两个命令都需要在 源码的顶层目录上 使用  ☆☆☆

二、linux 内核基本概念-中
    注意要把 linux源码 拷贝到 Ubuntu中 解压, 
    因为 源码中会有一些软件链文件, 这些文件,windows文件系统 不能识别
    
    解压命令 tar -xvf ***.tar.xz
    
//    arm-cortex_a8_linux-gnueabi-..
//    这个交叉编译工具链,我没有从录制课程的老师手里拿到
//    大家也不必使用这个工具链,直接使用 课程资料里提供的 
//    gcc-4.6.4.tar.xz 就可以了
    
    配置交叉编译工具链:
        1.export PATH=/自己的路径/gcc-4.6.4/bin:$PATH
        2. 写到启动脚本中 /etc/profile  或者 .bashrc
    
    修改 源码顶层目录的 Makfile
    ARCH ?= arm
    CROSS_COMPILE ?= arm-none-linux-gnueabi-
//    我们不用 arm-cortex_a8_linux-gnueabi- 这个。。
    
    
三、linux 内核基本概念-下
    使用 gcc-4.6.4 编译内核
    使用 putty 串口工具软件
    
//    提醒: 如果想启动内核,还需要配置一下网络 
//         网络配置学习视频 
// 系统移植之网络配置             11.3    群内    http://e.vhall.com/102020226
    设备树: 用于描述硬件设备信息。
    低版本内核的设备硬件备信息,是存放在linux源码中的
    高版本是写到 设备树文件中
    
☆    arch  不同CPU体系结构的差异代码
        -> arm  不同板子板子的源码 
            -> boot  uImage zImage 
                -> dts 设备树
☆    driver 驱动目录
        -> net 网络驱动 (与设备相关)
    kernel 内核调度算法
    net    网络协议  (与设备无关的)
    block 块设备相关驱动
    fs  文件系统
    include 头文件存放目录
    Documentation 帮助文档
    tools 工具
    scripts 编译内核时使用的脚本
    ipc 进程间通信
    mm 内存管理
        
    理解平台相关代码和平台无关代码
    
四、linux 内核启动分析
    启动 u-boot -> kernel -> rootfs(root filesystem)
    启动脚本 /etc/init.d/rcS  自启动应用
    Starting kernel ... 属于 uboot的打印
    
    重点理解 uboot 启动流程(面试出现频率高)
    内核启动流程
    
    a. 自解压 decompess (arch/arm/boot/compressed/head.S) 汇编
    b. 检测合法性 入口 stext (arch/arm/kernel/head.S)
        (CPU 类型 机器类型)
    c.  运行 C代码 start_kernel (init/main.c)
    d. 挂在 rootfs
    e. 运行第一个应用程序 linuxrc
    
五、linux 内核调试方法
    1. 汇编阶段 点灯法
    2. puts(内核解压前)
    3. printascii (console 初始化前)
    4. printk (内核解压后,信息输出显示到console初始化之后)
        打印级别  /proc/sys/kernel/printk
            8个打印级别
    init/main.c - start_kernel 
    第一次编译内核代码会比较长时间
    如果修改或者添加源文件,再次编译,只会编译变化的部分 会快一些
    
    oop内核异常信息
    
    pc : 程序计数器
    arm-none-linux-gnueabi-addr2line pc地址 -e vmlinux -f
    在源码中显示具体出错的位置

猜你喜欢

转载自blog.csdn.net/weixin_39148042/article/details/82494809