转自:http://blog.csdn.net/myarrow/article/details/8609564

1. 简介

  内核提供了一个重要的结构体struct machine_desc ,这个结构体在内核移植中起到相当重要的作用,内核通过machine_desc结构体来控制系统体系架构相关部分的初始化。

machine_desc结构体通过MACHINE_START宏来初始化,在代码中, 通过在start_kernel->setup_arch中调用setup_machine_fdt来获取。

2. machine_desc结构体

machine_desc结构体定义如下:

  1. /* 在文件:arch/arm/include/asm/mach/arch.h */
  2. struct machine_desc {
  3. unsigned int        nr;     /* architecture number  */
  4. const char      *name;      /* architecture name    */
  5. unsigned long       boot_params;    /* tagged list      */
  6. const char      **dt_compat;    /* array of device tree
  7. * 'compatible' strings */
  8. unsigned int        nr_irqs;    /* number of IRQs */
  9. unsigned int        video_start;    /* start of video RAM   */
  10. unsigned int        video_end;  /* end of video RAM */
  11. unsigned int        reserve_lp0 :1; /* never has lp0    */
  12. unsigned int        reserve_lp1 :1; /* never has lp1    */
  13. unsigned int        reserve_lp2 :1; /* never has lp2    */
  14. unsigned int        soft_reboot :1; /* soft reboot      */
  15. void            (*fixup)(struct machine_desc *,
  16. struct tag *, char **,
  17. struct meminfo *);
  18. void            (*reserve)(void);/* reserve mem blocks  */
  19. void            (*map_io)(void);/* IO mapping function  */
  20. void            (*init_early)(void);
  21. void            (*init_irq)(void);
  22. struct sys_timer    *timer;     /* system tick timer    */
  23. void            (*init_machine)(void);
  24. #ifdef CONFIG_MULTI_IRQ_HANDLER
  25. void            (*handle_irq)(struct pt_regs *);
  26. #endif
  27. };

3. machine_desc初始化

machine_desc初始化例子如下:

  1. MACHINE_START(MA, "myboard")
  2. .boot_params    = PLAT_PHYS_OFFSET + 0x800,
  3. .fixup      = ma_fixup,
  4. .reserve             = &ma_reserve,  //内存在交给Linux管理之前,进行预留
  5. .map_io     = ma_map_io,
  6. .init_irq   = ma_init_irq,
  7. .timer      = &ma_timer,
  8. .init_machine   = machine_ma_board_init,
  9. MACHINE_END

MACHINE_START和MACHINE_END宏定义如下:

  1. /*
  2. * Set of macros to define architecture features.  This is built into
  3. * a table by the linker.
  4. */
  5. #define MACHINE_START(_type,_name)          \
  6. static const struct machine_desc __mach_desc_##_type    \
  7. __used                         \
  8. __attribute__((__section__(".arch.info.init"))) = {    \
  9. .nr     = MACH_TYPE_##_type,        \
  10. .name       = _name,
  11. #define MACHINE_END             \
  12. };

machine_desc结构体【转】的更多相关文章

  1. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  2. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  3. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  4. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  5. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  6. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  7. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. C语言结构体对齐

    1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...

随机推荐

  1. Flash与JavaScript互动

    最近做的一个项目需要用javascript来实现自动复制文本到剪切板,但测试时发现只有ie6.0支持. 到百度搜索后才发现,原来ie7.0.firefox是不支持这样的操作的,随后又搜索了一下,找到一 ...

  2. eclipse复制工作空间配置

    eclipse复制工作空间配置   eclipse复制工作空间配置 总结一下,复制工作空间配置步骤如下: 1 使用eclipse新建workspace. 2 将新建的workspace下的.metad ...

  3. ArrayList创建步骤及基本方法

    ArrayList创建变量的步骤 ArrayList ------>集合 1: 导入包 java.util.ArrayList包中 2: 创建引用类型的变量 数据类型< 集合存储的数据类型 ...

  4. CodeForces912E 折半+二分+双指针

    http://codeforces.com/problemset/problem/912/E 题意·n个质数,问因子中只包含这其中几个质数的第k大的数是多少 最显然的想法是暴力搜预处理出所有的小于1e ...

  5. Golang面向过程编程-函数

    Golang面向过程编程-函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是函数 简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的 ...

  6. 拒绝了对对象 'Proc_LHDashBoard' (数据库 'jy',架构 'dbo')的 EXECUTE 权限。”

    没有权限,在数据库里面开启权限.找到你那个访问的用户名,然后:

  7. Hive记录-Hive常用命令操作

    1.hive支持四种数据模型 • external table ---外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该 ...

  8. Request库学习

    0x00前言 这库让我爱上了python  碉堡! 开心去学了一些python,然后就来学这个时候神库~~ 资料来源:http://cn.python-requests.org/en/latest/u ...

  9. java实现获取当前年月日 小时 分钟 秒 毫秒

    java代码实现如下 view source print?     /**      * 英文简写(默认)如:2010-12-01      */     public static String F ...

  10. 【搬运】C指针 一

    本文搬运自https://fishc.com.cn/forum.php?mod=viewthread&tid=71654&extra=page%3D1%26filter%3Dtypei ...