1、 说明

  本文采用的Linux源码版本来自Altera公司FTP。不考虑zImage生成的Compress过程。因为zImage是内核binary文件经过gzip 压缩,并在头部添加解压缩代码实现的。这部分可以在内核代码树的arch/nios2/boot/compress下分析链接脚本及makefile得出。另外,Linux源码中实现了编译MMU版本和无MMU版本的Linux,所以编译无MMU版本时,关于MMU的处理部分可以忽略。可以通过设置JTAG UART或者Altera UART的基址来实现内核开启之前printk的串口输出。

2、 Head.S

  内核程序最开始的symbol为_start。注意Nios II处理器的初始状态。如果有u-boot的存在情况,r4保存板子信息的结构体地址,r5为SOPC总线上内存的实际物理地址的开始,r6为内存物理地址的结束,r7为u-boot传过来内核启动参数字符串的首地址。  启动过程:关闭中断,清除指令缓存,指令缓存的大小在全局CONFIG中定义。清除数据缓存,有MMU的话初始化MMU,清除BSS段,设置堆栈,调用nios2_boot_init,然后调用start_kernel,开启内核。  这里注意的是,中间夹杂了exception_handler_hook,这个实际上是异常处理入口,注意,虽然Altera允许在Qsys中对Nios II的异常向量表的位置做设置,但是这里要知道,内存的开始地址为CONFIG_MEM_BASE | CONFIG_KERNEL_REGION_BASE,而异常向量表的位置始终为CONFIG_MEM_BASE | CONFIG_KERNEL_REGION_BASE|0x20,所以在Qsys中保持默认就可以了。 inthandler的处理过程在entry.S或entry-nommu.S中,具体处理可以参考Nios II Processor Reference Handbook。

3、setup.c

  这个文件中包含了Linux内核和硬件相关的部分的初始化过程需要的程序。接下来分析nios2_boot_init。初始化MMU,解析u-boot传过来的参数,判断魔数,保存参数。然后early_init_devtree,从DTB(由DTS生成)数据中解析需要初始化的设备,SOPC信息等等。然后就开启内核。

Nios II uCLinux/Linux启动分析的更多相关文章

  1. 关于Nios II的启动分析(转载)

    原文地址:http://hi.baidu.com/goatdai/item/cc33671545d89243e75e06ad 常用到的存储器包括SDRMA.SRAM.FLASH.Onchip_memo ...

  2. Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序

            1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...

  3. linux内核分析作业3:跟踪分析Linux内核的启动过程

    内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...

  4. Linux内核分析之可执行程序的装载和启动

    一.内容分析 1.可执行文件的创建 (1)预处理阶段 预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白字符.其中预处理指令主 ...

  5. Linux内核分析——跟踪分析Linux内核的启动过程

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 实验部分 menu程序: cd LinuxKernel/ qemu -kernel linux-3.18.6/a ...

  6. Linux内核分析之跟踪分析Linux内核的启动过程

    一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img ...

  7. Linux内核启动分析过程-《Linux内核分析》week3作业

    环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...

  8. 从linux启动到rootfs的挂载分析

    简单的来说,根文件系统包括虚拟根文件系统和真实根文件系统.在Kernel启动的初始阶段,首先去创建虚拟的根文件系统,接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系 ...

  9. Linux内核启动分析

    张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...

随机推荐

  1. 7:django 中间件

    中间件 中间件是一个连接django请求/相应处理的框架,是一个轻量级的低层次的全局影响django输入输出的系统插件. 每一个中间件组件负责一些特定的功能,这里我们我们只看一下如何激活使用系统自带的 ...

  2. 用淘宝镜像cnpm代替npm

    安装淘宝镜像cnpm: $ sudo npm install -g cnpm --registry=https://registry.npm.taobao.org 然后就大部分可以用cnpm来代替np ...

  3. Idea创建模板

    新建文件模板 /** * * @author zenglw * @date ${DATE} */ Mapper #if (${PACKAGE_NAME} && ${PACKAGE_NA ...

  4. Django-form組件補充

    自定义验证规则 方法一: 1 2 3 4 5 6 7 8 9 10 from django.forms import Form   from django.forms import widgets f ...

  5. opencv python基本操作

    Python usage crop frame: croppedframe = frame[ymin:ymax, xmin:xmax] resize frame: reszframe = cv2.re ...

  6. 【转载】关于Python的Mixin模式

    本博按: mixin是看起来是多继承的一种,但是,这种继承并不作为父类存在,而是增加功能到子类中. 像C或C++这类语言都支持多重继承,一个子类可以有多个父类,这样的设计常被人诟病.因为继承应该是个” ...

  7. android之 Activity跳转出现闪屏

    原文:http://blog.csdn.net/az313/article/details/17321549 同一个应用,在不同手机上测试,Activity之间跳转出现闪屏,界面来回跳转…… 查阅网上 ...

  8. python模块之HTMLParser

    HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径. HTMLParser采用的是一种事件驱动的模式,当HTMLParse ...

  9. RedisDesktopManager-0.9.3 for windows (转)

    redis数据库的可视化工具 官方出了RedisDesktopManager-0.9.8版本后要购买了.之前自用的Windows版本0.9.3.817有需要的可以使用.解压直接启动即可.主要以备自用! ...

  10. matlab学习之绘制参数曲线,添加辅助线以及颜色设置

    粘贴代码 % 插入参数曲线h % 插入辅助线h1 % 并设置颜色,包括画布颜色和曲线颜色 t=-pi:0.1:pi; x=cos(t)-sin(3*t); y=sin(t).*cos(t)-cos(3 ...