内核启动参数机制学习笔记-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 6397845
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16635
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

发布时间:2012-12-31 17:18:47

     前两天把内核关于内核启动参数的一些知识彻底地分析了一遍《linux内核源码分析--内核启动命令行的传递过程(linux-3.0 armv7)》,发现了一些以前没有注意的细节问题,这里总结如下:一、2.6.32以后的内核不再对cmdline中的未知参数输出警告信息     以前在移植内核的时候,如果cmdline中有未知的参数,内核一般会打印如下警告:unknown boot option `**********': ignoring    但是这次我在uboot的bootargs中添加了内核未知的参数,比......

阅读(2226) | 评论(0) | 转发(0)

发布时间:2012-12-31 17:15:31





    在完成了zimage自解压之后,就跳转到了解压后的内核(也就是vmlinux的bin版本image),具体的入口可以在arch/arm/kernel/vmlinux.lds.s(最终的链接脚本是通过这个文件产生的)中获得:
......
sections
{
#ifdef config_xip_kernel
. = xip_virt_addr(config_xip_phys_addr);
#else
. = page_offset text_offset;
#endif

.init : { /* init co......

阅读(3496) | 评论(0) | 转发(3)

发布时间:2012-12-31 17:14:10

1. 引言 在专用的嵌入式板子运行 gnu/linux 系统已经变得越来越流行。一个嵌入式 linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 boot loader 两大部分。 2. linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 flash 内存设备之上文件系统。通常用 ram disk 来......

阅读(3212) | 评论(0) | 转发(7)

发布时间:2012-12-31 17:13:36

1、嵌入式linux软件结构与分布在一般情况下嵌入式linux系统中的软件主要分为以下及部分:(1)引导加载程序:其中包括内部rom中的固化启动代码和boot loader两部分。而这个内部固化rom是厂家在芯片生产时候固化的,作用基本上是引导boot loader。有的芯片比较复杂,比如omap3,他在flash中没有代码的时候有许多启动方式:usb、uart或以太网等等。而s3c24x0则很简单,只有norboot和nandboot。(2)linux kernel 和drivers。(3)文件系统。包括根文件系统和建立于flash内存设备之上的文件系统(ext4、ubi、cramfs等等)......

阅读(2461) | 评论(0) | 转发(0)

发布时间:2012-12-31 17:10:37

    在基本分析完内核启动流程的之后,还有一个比较重要的初始化函数没有分析,那就是do_basic_setup。在内核init线程中调用了do_basic_setup,这个函数也做了很多内核和驱动的初始化工作,详解如下:/* * 好了, 设备现在已经初始化完成。 但是还没有一个设备被初始化过, * 但是 cpu 的子系统已经启动并运行, * 且内存和处理器管理系统已经在工作了。 * * 现在我们终于可以开始做一些实际的工作了.. */static void __init do_basic_setup(v......

阅读(2231) | 评论(0) | 转发(0)

发布时间:2012-12-31 17:10:30

  在构架相关的汇编代码运行完之后,程序跳入了构架无关的内核c语言代码:init/main.c中的start_kernel函数,在这个函数中linux内核开始真正进入初始化阶段,   下面我就顺这代码逐个函数的解释,但是这里并不会过于深入每个函数,因为这样就会只见树木,不见森林。分析代码首先要从构架上宏观地理解,然后再去考虑细节问题(这和小时候学语文要概括中心思想和段落大意是一个道理)。今后对于每个子系统的初始化,特别是内存子系统,有空都会分析一遍。asmlinkage void __init start_kernel(void){  &nbs......

阅读(2312) | 评论(0) | 转发(0)

发布时间:2012-12-31 17:10:22

在分析start_kernel函数的时候,其中有构架相关的初始化函数setup_arch。此函数根据构架而异,对于arm构架的详细分析如下:void __init setup_arch(char **cmdline_p){    struct machine_desc *mdesc; 点击(此处)折叠或打开此为设备描述结构体,对于任何板子都定义了这样的一个结构体,我以前的文章有介绍:《uncompressing linux... done, booting the kernel》 1、machine type 不匹配   ......

阅读(2255) | 评论(0) | 转发(0)

发布时间:2012-12-31 17:10:07

    前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化。在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线程init。这个函数虽然意思为剩下的初始化,但是这个“剩下”的可是内容颇多,下面详细分析如下:/* * 我们必须确定在一个非__init函数或 * 其他根线程(root thread)和初始化线程(init thread)间的竞态。 * (这种竞态可能导致start_kernel在根线程运作到cpu_idle前被free_......

阅读(1985) | 评论(0) | 转发(0)

发布时间:2012-12-31 17:09:31

在开发linux驱动的时候,经常会用到container_of这个宏:include/linux/kernel.h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/** * container_of - 通过结构体的一个成员获取容器结构体的指针 * @ptr: 指向成员的指针。 * @type: 成员所嵌入的容器结构体类型。 * @member: 结构体中的成员名。 * */#define container_of(ptr, type, member) ({ \ &......

阅读(2188) | 评论(0) | 转发(0)

发布时间:2012-12-31 12:01:41

    linux内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常见的就是cmdline。以前我在启动内核的时候习惯性的通过uboot传递一个cmdline给内核,没有具体的分析这个过程。最近在分析内核启动过程的时候,重新看了一下内核启动参数的传递过程,彻底解决一下在这方面的疑惑。   一、bootloader与内核的通讯协议   内核的启动参数其实不仅仅包含在了cmdline中,cmdline不过是bootloader传递给内核的信......

阅读(2384) | 评论(0) | 转发(0)

发布时间:2012-12-31 11:35:25

在研究arm linux启动代码的时候顺手翻译了一下:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 启动 arm linux =================作者: russell king日期  : 2002年5月18日以下文档适用于 2.4.18-rmk6 及以上版本.为了启动arm linux,你需要一个引导装载程序(boot loader),它是一个在主内核启动前运行的一个小程序。引导装载程序需要初始化各种设备,并最终调用linux内核,将信息传递给内核。从本质上讲,引导装载程序应提供(至少)以下功能:1、设置和初始化ram。......

阅读(2541) | 评论(0) | 转发(0)

发布时间:2012-12-31 09:51:06

1、98年 马化腾等一伙凑了50万创办了腾讯 没买房;98年 史玉柱 借了50万搞脑白金 没买房;99年 丁磊用50万创办163.com 没买房;99年 陈天桥炒股赚了50万 创办盛大 没买房;99年 马云等18人凑了50万 注册阿里巴巴 没买房。如果当年他们用这50万买了房,现在估计还在还着银行的贷款吧。 2、年轻的我们必须懂得:1、你不勇敢,没人替你坚强。2、没有伞的孩子必须努力奔跑!3、自己选择的路、跪着也要把它走完。4、不要生气要争气,不要看破要突破,不要嫉妒要欣赏,不要拖延要积极,不要心动要行动。5、宁愿跑起来被拌倒无数次,也不愿规规矩矩走一辈子。就算跌倒也要豪迈的笑 3、人生三......

阅读(2762) | 评论(0) | 转发(0)

发布时间:2012-12-29 21:12:34

#grep "search_string" * -rr   例子: #grep "hello" * -rr......

阅读(1948) | 评论(0) | 转发(2)

发布时间:2012-12-28 19:27:18

 此文为两年前为好友刘庆敏的书《嵌入式linux开发详解--基于at91rm9200和linux 2.6》中帮忙写的章节的重新整理。如有雷同,纯属必然。经作者同意,将我写的部分重新整理后放入blog中。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~众所周知,linux内核是使用make命令来配置并编译的,那必然少不了makefile。在内核目录树中我们可以看到内核编译系统的顶层makefile文件。但是如此复杂、庞大的内核源码绝不可能使用一个或......

阅读(2039) | 评论(0) | 转发(0)

发布时间:2012-12-28 19:25:41

    在完成了zimage自解压之后,就跳转到了解压后的内核(也就是vmlinux的bin版本image),具体的入口可以在arch/arm/kernel/vmlinux.lds.s(最终的链接脚本是通过这个文件产生的)中获得: ...... sections { #ifdef config_xip_kernel . = xip_virt_addr(config_xip_phys_addr); #else . = page_offset text_offset; #endif .init : { /* init co......

阅读(2910) | 评论(0) | 转发(0)

发布时间:2012-12-28 19:25:31

    研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了解内核启动过程。我在研究内核的内存管理的时候,想知道内核启动后的页表的放置,页表的初始化等信息,这促使我这次仔细地研究内核的启动代码。    cpu在bootloader的帮助下将内核载入到了内存中,并开始执行。当然,bootloader必须为zimage做好必要的准备: 1. cpu 寄存器的设置:r0=0;r1=machine id(即machine type number,定义在linux/arch/arm/tools/mach-types);r2=内......

阅读(2418) | 评论(0) | 转发(0)

发布时间:2012-12-28 19:22:15

在学习linux进程内核栈的时候,看到这篇好文,在这里转载下:(注意:数据结构针对的是早期的2.4内核,2.6以后的内核数据结构和处理方法稍有不同,但是基本原理相同) 作者: 曹国辉 南京凌嵌教育嵌入式linux金牌讲师 专题研究一  进程的深入理解与分析        进程是程序的一次执行过程。用剧本和演出来类比,程序相当于剧本,而进程则相当于剧本的一次演出,舞台、灯光则相当于进程的运行环境。 进程的堆栈       每个进程......

阅读(1889) | 评论(0) | 转发(0)

发布时间:2012-12-28 19:20:15

    在移植内核的时候,通常会遇到引脚复用(mux)的配置问题。在现在的linux内核中,对于ti的arm芯片,早已经有了比较通用的mux配置框架。这对于许多ti的芯片都是通用的,这次看am335x的代码顺手写一下分析,以备后用。一、硬件    对于许多ti的芯片来说,引脚复用的配置是在control module(配置模块)的寄存器里配置的,(这个和三星的cpu有点不同,三星的一般在gpio的寄存器中配置)。所以当你需要配置这些寄存器的时候,请到数据手册的control module的pad control registers查找。ti的cpu芯片手......

阅读(2473) | 评论(0) | 转发(0)

发布时间:2012-12-28 10:30:18

大家用source insight看linux源码的时候都遇到这么一个麻烦,makefile和kconfig中的文字在搜索的时候不能找到,这是因为source insight默认是不选makefile的,也没有konfig这种类型的文件。下面就讲一下   如何添加makefile: 打开source insight,在新建工程之前,进入options -> document options-> 点击document type的下拉框,然后选择make file,在右边的file filter中,在原先的*.mak后面加上一个分号,即多个不同过滤规则以分号间隔......

阅读(3759) | 评论(1) | 转发(3)

发布时间:2012-12-27 19:12:34

从linux2.6起,引入了一套新的驱动管理和注册机制:platform_device和platform_driver。linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver进行注册。   linux platform driver机制和传统的device_driver机制相比,一个十分明显的优势在于platform机制将本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform_device提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植......

阅读(2924) | 评论(0) | 转发(1)

发布时间:2012-12-27 17:18:05

linux arm平台的gpio 2011-04-20 20:21:35|  分类: 默认分类 |  标签:define  pin  unsigned  int  0x10     字号:大中小 订阅 首先是代码中的几个宏定义:   2.6.31内核:arch/arm/mach-2410/include/mach/regs-gpio.h   #define s3c2......

阅读(1848) | 评论(0) | 转发(0)

发布时间:2012-12-27 17:13:20

1.1 u-boot工作过程 u-boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 ø 硬件设备初始化 ø 加载u-boot第二阶段代码到ram空间 ø 设置好栈 ø 跳转到第二阶段代码入口 (2)第二阶段的功能 ø 初始化本阶段使用的硬件设备 ø 检测系统内存映射 ø 将内核从flash读取到ram中 ø 为内核设置启动参数 ø 调用内核 1.1.1 u-boot启动第一阶段代码分析 第一阶段对应的文......

阅读(2122) | 评论(0) | 转发(0)

发布时间:2012-12-27 17:06:42

   两年前总结的东西,一时没时间整理,放了很久居然差点忘了,现在重见天日了。但是还不是很完整,先放上来,以后有时间就完善她。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   最近需要在板子上加上一块watchdog,以确保在系统出错时自动重启,所以看了一些在嵌入式系统中使用看门狗的资料,现在总结如下:一、看门狗原理    在产品化的嵌入式系统中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗。    看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后,计数器开始自动计......

阅读(1925) | 评论(0) | 转发(0)

发布时间:2012-12-27 16:08:03

    在移植bootloader到新嵌入式开发板的过程中经常会碰到初始化ddrx和ddr控制器的问题。而现在较高端的嵌入式cpu中早已集成了ddr2甚至ddr3控制器,这相较于早期使用sdram的cpu,在初始化的时候可能会复杂许多。再加上这些代码一般是在系统刚启动的时候运行的,通常为汇编代码,看着那一大坨汇编程序,不免有些恐惧感。但是如果对ddrx内存原理及其与ddrx控制器的关系有些了解的话,这个配置工作其实还是有章可循的。下面我根据自己的开发经验总结如下,但是此处不涉及具体代码,只对一般流程做描述,因为代码必须是和硬件配套的。如果你先看具体代码,......

阅读(1895) | 评论(0) | 转发(0)

发布时间:2012-12-27 16:07:06

现在我们再来看看lib_arm/board.c中的第二阶段入口函数start_armboot : void start_armboot (void)                      {        init_fnc_t **init_fnc_ptr;   &nbs......

阅读(2884) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

dafanzi2016-12-05 18:21

我找到代码了 不用了 谢谢

  |  

dafanzi2016-12-05 17:20

大佬,在你这篇讲解内存池的博文(http://blog.chinaunix.net/uid-28458801-id-4254501.html)中,list.h源文件没有提供啊。你能提供这个博文的完整代码我学习学习吗?能的话发给我邮箱可以吗?brottfan@163.com谢谢啦

  |  
留言热议
请登录后留言。
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图