内核加载与linux的grub】的更多相关文章

计算机系统的启动是一个复杂的过程,启动过程大致可以分为以下几个阶段: +------计算机系统启动流程----------------------------- --------------------+ |+-----------------+ +------------------+ +----------------+| || | | | | || || 管理控制单元上电 |----->| cpu上电 |---->| BIOS引导 || || | | | | || |+---------…
无论是Linux还是Windows,在加电后的第一步都是先运行BIOS(Basic Input/Output System)程序——不知道是不是所以的电脑系统都是如此.BIOS保存在主板上的一个non-volatile(即非易失)存储器,如PROM,EPROM,Flash等.——以前的BIOS一般都是只读的,现代的系统中,允许刷新BIOS程序.它的任务就是简单的初始化和识别系统硬件设备,如CPU,内存,输入/输出设备,外部存储设备等.然后找到bootloader的位置,并加载bootloader…
bootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag是由bootloader提供的,在u-boot下默认是由bootm命令建立的). 通过mkimage可以给内核镜像或根文件系统镜像加入一个用来记录镜像的各种信息的头.同样通过mkimage也可以将内核镜像进行一次压缩(指定-C…
        一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E6321. 二.问题背景 已经基于创龙的3359核心板资料以及UBOOT-2016.05完成了UBOOT的二次开发,实现了网口驱动,在UBOOT命令行中已经能够PING PC,在UBOOT中网口功能正常. 因为Linux下需重点修改调试网口驱动.所以网口暂时不可用,现在准备使SD卡启动UBOOT,加载设…
Linux内核支持动态的加载模块运行:比如insmod first_drv.ko,这样就可以将模块加载到内核所在空间供应用程序调用.现在简单描述下insmod first_drv.ko的过程 1.insmod也是一个用户进程 2.insmod进程从命令行中读取要链接的模块名字:first_drv.ko 3.insmod进程确定模块对象代码所在的文件在系统目录树中的位置,即first_drv.ko文件所在的位置 4.insmod进程从文件系统所在的存储区读入存有模块目标代码的文件 5.insmod…
最后剩下最核心的函数do_execve了,由于这里为了简单起见我不分析shell命令的情况, /* * 'do_execve()'函数执行一个新程序. */ //// execve()系统中断调用函数.加载并执行子进程(其它程序). // 该函数系统中断调用(int 0x80)功能号__NR_execve 调用的函数. // 参数:eip - 指向堆栈中调用系统中断的程序代码指针eip 处,参见kernel/system_call.s 程序 // 开始部分的说明:tmp - 系统中断调用本函数时…
从现在开始就是分析最后的核心模块exec.c了,分析完这个文件后,就会和之前的所有分析形成一个环路,从创建进程.加载进程程序到进程调度.内存管理. exec.c的核心do_execve函数很长,而且用到了很多其他的函数,copy_strings就是其中一个,我们这里就先来分析这个函数. 首先看调用处,在main.c中: static char *argv_rc[] = { "/bin/sh", NULL}; // 调用执行程序时参数的字符串数组. static char *envp_r…
客户端程序内嵌Webbrowser控件时,默认情况都是使用IE7兼容模式打开网页的.但是IE7有很多新的特性不支持,导致无法正常显示出来,所以需要强制使用高版本的IE内核来加载.渲染. void ChangeRegedit(const wchar_t* pExeName) { if ( NULL == pExeName ) return ; TCHAR szVersion[] = {}; DWORD dwSize = ; HKEY hKey; // 先获取IE版本 , KEY_READ, &hK…
1.分析: 既然符号重复了,那么说明有一个部分既被编译到内核中也被编译成模块了,因此在加载模块时,内核报符号重复的提示 2.解决 直接配置内核的某一部分编译成模块,例如笔者就直接将USB这一部分编译成模块即可…
一.背景 1.更改了内核的配置,重新编译了内核 2.未重新编译内核模块 3.板子上只更新了内核,并未更新文件系统 二.分析 发现是在加载内核模块时出现Unknown symbol等信息,恰逢当时只更新了内核未更新根文件系统,因此怀疑与根文件系统有关. 三.解决 编译对应的内核模块,并更新文件系统到板子上…