Linux内核(Day20)


    
一 回忆昨天的内容:
     移植uboot uboot属于bootloader的一种 redboot armboot...
     PC UEFI 
     阅读uboot的源码
     uboot需要初始化的硬件:
     cpu 内存 闪存 时钟 网卡 串口 看门狗 关闭中断
     提高用户体验
     
     阅读uboot的方法:
     1. 有设计文档看设计文档
     2. 只关注框架,放弃细节
     
     uboot代码的执行流程:
     上电 --> uboot ---> _stext ---> b reset ---> 
     bl board_init_f ---> ldr pc, =board_init_r ---> 
     run_main_loop ---> while (1) {cli_loop} ---> 
     cli_simple_loop ---> for (;;) ---> 引导linux内核
     
     内存管理:mmu 
     物理地址:开启mmu之后,没有经过mmu,
     直接出现在地址总线上的地址
     虚拟地址:经过mmu映射的地址
     
二 Linux内核
    2.0.0 linux内核版本
                linux 
                2.4 最早期
                2.6 版本使用最多的版本
                x6818 使用的是3.4版本 uname -a 
                PC 机上使用的是5.4.0版本
                
    2.0.1 linux内核的组织结构
            见图 linux内核组织结构
                
    2.0.2 烧录三大软件时 uImage是从哪里来的
        uImage 就是Linux内核的二进制文件,具体实施步骤如下:
        
    2.1 Linux内核源码的获取
        三星公司提供:
        cp /mnt/hgfs/easthome_porting/kernel.tar.bz2 ./ 
    
    2.2 首先来聊聊linux 内核的特点:
        著名的开源软件
        www.kernel.org
        Linux内核支持多种处理器架构 
        mips la x86 arm x64 ppc....
        Linux内核支持多种开发板,上万种
        Linux内核支持多种文件系统: NTFS FAT32 EXT4 CRAMFS...
        Linux内核支持多种硬件驱动
        
    2.3 谈谈linux内核的七大功能 (7大子系统)
        内存管理/进程管理/网络协议栈/系统调用/
        设备驱动/文件系统/平台相关(BSP)
        
    2.4 linux内核的源码操作:
        实施步骤:
        2.4.1 参照2.1 获取linux内核源码
            获取交叉编译工具 
        2.4.2 先不要根据硬件差异修改代码,先编译验证
            make distclean //获取最干净的源码
            make x6818_defconfig //匹配内核源码能够
                                                        在x6818开发板上运行
            或
            cp arch/arm/configs/x6818_defconfig  .config
            x6818_defconfig 是x6818的配置文件
            
            make uImage -j8 //编译生成uImage
            
        2.4.3 linux内核允许配置
            具体到某一款嵌入式设备可能只需要用到其中的一部分
            功能,linux内核允许通过配置只将选中的功能编译进
            uImage
            选择哪些编译进内核,哪些不编译进内核的过程,
            叫做内核的剪裁
            
            如何修改配置:
            make menuconfig  ---> 展示出来一个图形化的界面
            通过上下左右,空格去选择配置
            
            General setup  ---> //通用配置
                    (-liuyang) Local version - append to kernel release
                    [*] System V IPC
                    (5) Default panic timeout
                    
            System Type  ---> //系统类型
                    ARM system type (SLsiAP S5P6818)  ---> //芯片的类型
                    
            Userspace binary formats  --->
                Kernel support for ELF binaries
            
            Device Drivers  ---> //设备驱动的配置
            
            File systems  ---> //文件系统的配置
                [*] Network File Systems  ---> //网络文件系统
                
            退出时,可以选择是否保存
            
            make config //也可以配置内核
            make xconfig //需要QT4的支持
            make gconfig //需要GTK的支持
            
    2.5 内核的编译
        配置结束后
        kernel 跟目录下的Makefile是总的
        vim Makefile     
            ARCH    ?= arm
            CROSS_COMPILE ?= arm-cortex_a9-linux-gnu-    
        make uImage  --> 给uboot使用
        linux 内核本质上也是一个裸板程序
        
                                    压缩               压缩
        125M vmlinux ----> 11M Image ---> 5.2M zImage 
        10M 软盘 
        
        最终生成可执行程序的过程和shell框架是一样的 01 
        xxx.o yyy.o zzz.o ...-> vmlinux (ELF二进制文件)
        --> Image ---> zImage ----> uImage (比zImage大64B)
        
        uImage是专门给uboot用的
        uboot在加载启动linux内核时,需要一些内核的信息
            内核加载的位置
            内核的大小 
            内核版本
            ....
          fdisk 2 2 0x100000:0x4000000 0x4100000:0x2f200000
        
    2.6 linux内核的源码分析:
        2.6.1 入口文件
            1) 看链接脚本确定
            2) make V=1
            rm vmlinux
            make V=1 > 1.txt
            arm-cortex_a9-linux-gnueabi-ld -EL  -r -o vmlinux.o 
            arch/arm/kernel/head.o 
            arch/arm/kernel/init_task.o 
            
            找到入口文件:arch/arm/kernel/head.S
            就是linux内核的真正的入口文件
            
            注意:
            阅读源码时:
            1.有设计文档看设计文档
            2.注重框架注重流程,放弃细节
            
            

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值