Nios II uCLinux/Linux启动分析
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启动分析的更多相关文章
- 关于Nios II的启动分析(转载)
原文地址:http://hi.baidu.com/goatdai/item/cc33671545d89243e75e06ad 常用到的存储器包括SDRMA.SRAM.FLASH.Onchip_memo ...
- Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序
1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...
- linux内核分析作业3:跟踪分析Linux内核的启动过程
内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...
- Linux内核分析之可执行程序的装载和启动
一.内容分析 1.可执行文件的创建 (1)预处理阶段 预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白字符.其中预处理指令主 ...
- Linux内核分析——跟踪分析Linux内核的启动过程
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 实验部分 menu程序: cd LinuxKernel/ qemu -kernel linux-3.18.6/a ...
- Linux内核分析之跟踪分析Linux内核的启动过程
一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img ...
- Linux内核启动分析过程-《Linux内核分析》week3作业
环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...
- 从linux启动到rootfs的挂载分析
简单的来说,根文件系统包括虚拟根文件系统和真实根文件系统.在Kernel启动的初始阶段,首先去创建虚拟的根文件系统,接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系 ...
- Linux内核启动分析
张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...
随机推荐
- Android Studio代码字体模糊解决方法
问题描述: 我的电脑分辨率是(1920*1080),然而安装了Android Studio后代码的一些部分区域出现模糊的现象,应该是软件默认设置与高分屏有冲突. 如下图所示. 解决方法: 打开设置对话 ...
- python_day2学习笔记
基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位, ...
- [PAT] 1021 Deepest Root (25)(25 分)
1021 Deepest Root (25)(25 分)A graph which is connected and acyclic can be considered a tree. The hei ...
- for in 对象时,属性为非负整数的情况
在我做一个需求的时候 for in 一个对象,对象的属性都是数字 但是我想给这个对象加一个默认的属性跟值 原对象是{5446:"广州市"}.....类似于下去 然后我想给我页面展示 ...
- 使用kubeadm安装k8s集群故障处理三则
最近在作安装k8s集群,测试了几种方法,最终觉得用kubeadm应该最规范. 限于公司特别的网络情况,其安装比网上不能访问google的情况还要艰难. 慢慢积累经验吧. 今天遇到的三则故障记下来作参考 ...
- Java学习笔记(二)——Java操作properties文件
[前面的话] 前段时间在学习和玩java web相关的东西,对于这些技术,一边学习,一边做东西,一边总结,希望可以一边成长和有所收获.有时总是思考太多反而成为了前进的阻力,所以对于生活还是简单一些,不 ...
- mac安装jdk1.8
一. http://www.oracle.com/technetwork/java/javase/downloads/index.html 去jdk官网下载 二.安装 一路傻瓜式安装,下一步下一步 三 ...
- Java基础:类加载机制
之前的<java基础:内存模型>当中,我们大体了解了在java当中,不同类型的信息,都存放于java当中哪个部位当中,那么有了对于堆.栈.方法区.的基本理解以后,今天我们来好好剖析一下,j ...
- 现代CSS清除浮动
清除浮动 排除远古时代的hack解决方案,比如那些要兼容IE6~8的方法.其实总结起来,大致有三种方法: overflow 原理解析:块级格式上下文规定了页面必须自动包含突出的浮动元素! 而overf ...
- 「PKUSC2018」星际穿越 (70分做法)
5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 27 Solved: 11[Submit][Status] ...