start_kernel() -> setup_arch(&command_line) -> mdesc = setup_machine(machine_arch_type) -> list = lookup_machine_type(nr) -> return struct machine_desc。

内核在启动的时候就是最先运行start_kernel() , 然后她就会调用体系结构相关的setup_arch(&command_line), 如arm体系结构的在arch/arm/kernel/setup。c中, 进一步, 她就要初始化板级相关的设备,

但在此之前, 她必须找到这块目标板的描述结构, 所以她就先通过lookup_machine_type(nr)来查找这个结构, 传入的参数是又uboot传过来的, 存储在r2中。

如假设她传入的是'SMDK2410' 的nr, lookup_machine_type(nr) 就会找到如下的machine_desc。 这个结构在一个专门描述sddk2410的文件中--arch/arm/mach-s3c2410/mach-smdk2410。

c

MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch

* to SMDK2410 */

/* Maintainer: Jonas Dietsche */

phys_io

= S3C2410_PA_UART,

。io_pg_offst

= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,

。boot_params

= S3C2410_SDRAM_PA + 0x100,

//重要的板级初始化函数

map_io

= smdk2410_map_io,

。init_irq

= s3c24xx_init_irq,

。init_machine

= smdk2410_init,

。timer

= &s3c24xx_timer,

MACHINE_END

MACHINE_START的第一个参数是用来构造机器的类型的, 如这里的SMDK2410 ,

又下面的定义

nr

= MACH_TYPE_##_type

有 nr = MACH_TYPE_SMDK2410

而 MACH_TYPE_SMDK2410这些机器类型则在/include/asm-arm/mach-types。h中定义:

#define MACH_TYPE_SMDK2410

193

完整的结构描述如下:

struct machine_desc {

/*

* Note! The first four elements are used

* by assembler code in head-armv。

S

*/

unsigned int

nr;

/* architecture number

*/

unsigned int

phys_io;

/* start of physical io

*/

unsigned int

io_pg_offst;

/* byte offset for io

* page tabe entry

*/

const char

*name;

/* architecture name

*/

unsigned long

boot_params;

/* tagged list

*/

unsigned int

video_start;

/* start of video RAM

*/

unsigned int

video_end;

/* end of video RAM

*/

unsigned int

reserve_lp0 :1;

/* never has lp0

*/

unsigned int

reserve_lp1 :1;

/* never has lp1

*/

unsigned int

reserve_lp2 :1;

/* never has lp2

*/

unsigned int

soft_reboot :1;

/* soft reboot

*/

void

(*fixup)(struct machine_desc *,

struct tag *, char **,

struct meminfo *);

void

(*map_io)(void);/* IO mapping function

*/

void

(*init_irq)(void);

struct sys_timer

*timer;

/* system tick timer

*/

void

(*init_machine)(void);

};。

全部

linux板级设备的,linux板级设备的初始化过程是怎样的?相关推荐

  1. linux ns级定时器_预热 | 万众期待的单片机、Linux二合一的STM32MP157开发板亮相

    STM32mp157  GUI操作体验视频 GUI架构简介 支持多种应用场景的HMI2.0应用,根据应用的类型将整个UI分为五个大类:多媒体,智能家电,卫生医疗,公共服务,系统.均支持于100ask_ ...

  2. Linux利器:QEMU!用它模拟开发板能替代真开发板?

    不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我! QEMU,搞嵌入式开发的一定不陌生,最近各大群里都讨论疯了,说它是Linux利器一点也不夸张.它是一款知名的而且开源的模拟器(官网 ...

  3. linux 开发板模拟u盘,linux 开发板(Linux USB Gadget) 模拟u盘

    前几天,搞了 hid设备,通过usb hid设备和windows进行通信.现在开始搞这个 mass storge 首先说明 环境:linux版本:3.15        使用开发板:SAMa5d3   ...

  4. Linux系统简介-虚拟机安装教程(保姆级)-Linux常用命令

    Linux系统简介-虚拟机安装教程-Linux常用命令 1.Linux系统简介 1.1Linux系统的历史 1.2Linux系统的特点和优势 1.3Linux发行版的分类 2.虚拟机的安装教程 2.1 ...

  5. 北京迅为i.mx6ull终结者开发板使用手册+嵌入式Linux开发指南+裸机手册下载地址

    i.MX6ULL终结者三大手册,加速学习和开发速度,一秒化无形! <嵌入式Linux开发指南>+<开发板使用手册>+<裸机使用手册> 详细手册点击链接下载:http ...

  6. 讯为开发板移植linux,迅为I.MX6ULL开发板移植Linux5.4内核教程

    4412上移植最新5.4内核的流程非常的简单,因为4412被Linux官方支持,那么我们来看一下怎么把官方5.4内核移植到我们的I.MX6ULL终结者开发板上. 平台:i.MX6ULL开发板 前言 本 ...

  7. imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程

    当Linux开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: /de ...

  8. s3c6410 jpeg编码 linux,立宇泰ARMSYS6410开发板推出三个linux系统版本

    ARMSYS6410采用了Linux-2.6.28作为标准版的linux内核,其中集成了丰富的驱动资源,充分展现S3C6410的各项特性,包括硬件编解码.2D/3D加速.显示协处理.TVOUT输出.视 ...

  9. OK6410开发板学习之安装linux系统至开发板

    说来惭愧,OK6410开发板自从买来就一直在躺灰,当时连教程也花了1千多大洋了,近来感觉前途迷茫,遂决定将其拿出来研究研究,看是否能够给我新出路. 废话不多说,先上一张OK6410开发板大图: 不要问 ...

  10. 开发板通过usb连linux,虚拟机Linux系统和开发板通过USB转串口连接的两种方法

    通过USB转串口连接虚拟机中的Linux系统和开发板,开始时候总是出现错误,显示什么串口重叠,最后求助高手帮我通过其他连接方式解决了问题,今天在网上查找资料,终于明白了开始错误的原因:开发板提供的驱动 ...

最新文章

  1. 实验三:实现一个大素数生成算法
  2. 细说Java主流日志工具库
  3. java console press any key_请问在JAVA中怎么实现在控制台下press any key to continue的功能?...
  4. 解决css firefox火狐浏览器IE浏览器下的兼容性问题
  5. Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
  6. 9月第1周国内IT技术类网站:CSDN覆盖数持续走低
  7. SQL工作笔记-达梦存储过程及时间触发器实现自动生成数据
  8. 2016 China Collegiate Programming Contest Final
  9. JMeter中如何实现跨线程组关联
  10. linux系统工程师修改打开文件数限制代码教程。服务器运维技术
  11. @RequestParam
  12. web服务-Axis2的安装
  13. ktt算法 约化_svm算法 最通俗易懂讲解
  14. 敬业签云便签提示“基础连接已关闭,发送时发生错误”如何解决
  15. AT89S8253片内EEPROM字节读、字节写、页读、页写驱动代码、注意事项及注释
  16. java 蓝牙打印_Android - 将收据打印到蓝牙打印机
  17. Vuetify中的v-pagination如何实现分页
  18. Markdown 语法学习
  19. 主动学习(active learning)
  20. .NET Core使用Cookie做身份验证

热门文章

  1. Android:日常学习笔记(8)———开发微信聊天界面
  2. 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
  3. 命令行批量修改IP并ping测试
  4. C#——orm-FulentData(sqlite3)——异常捕获
  5. 完美解决:Could not open the editor: Editor could not be initialized
  6. E60的存储空间不足? NO
  7. oracle 12 跟踪,Oracle 12C 块修改跟踪(Block chage tracking) 功能
  8. 游戏筑基开发之变量、运算符、转义字符的注意点(C语言)
  9. 多线程例题练手(c入门)
  10. 自然语言处理理论与实战