linux板级设备的,linux板级设备的初始化过程是怎样的?
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板级设备的初始化过程是怎样的?相关推荐
- linux ns级定时器_预热 | 万众期待的单片机、Linux二合一的STM32MP157开发板亮相
STM32mp157 GUI操作体验视频 GUI架构简介 支持多种应用场景的HMI2.0应用,根据应用的类型将整个UI分为五个大类:多媒体,智能家电,卫生医疗,公共服务,系统.均支持于100ask_ ...
- Linux利器:QEMU!用它模拟开发板能替代真开发板?
不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我! QEMU,搞嵌入式开发的一定不陌生,最近各大群里都讨论疯了,说它是Linux利器一点也不夸张.它是一款知名的而且开源的模拟器(官网 ...
- linux 开发板模拟u盘,linux 开发板(Linux USB Gadget) 模拟u盘
前几天,搞了 hid设备,通过usb hid设备和windows进行通信.现在开始搞这个 mass storge 首先说明 环境:linux版本:3.15 使用开发板:SAMa5d3 ...
- Linux系统简介-虚拟机安装教程(保姆级)-Linux常用命令
Linux系统简介-虚拟机安装教程-Linux常用命令 1.Linux系统简介 1.1Linux系统的历史 1.2Linux系统的特点和优势 1.3Linux发行版的分类 2.虚拟机的安装教程 2.1 ...
- 北京迅为i.mx6ull终结者开发板使用手册+嵌入式Linux开发指南+裸机手册下载地址
i.MX6ULL终结者三大手册,加速学习和开发速度,一秒化无形! <嵌入式Linux开发指南>+<开发板使用手册>+<裸机使用手册> 详细手册点击链接下载:http ...
- 讯为开发板移植linux,迅为I.MX6ULL开发板移植Linux5.4内核教程
4412上移植最新5.4内核的流程非常的简单,因为4412被Linux官方支持,那么我们来看一下怎么把官方5.4内核移植到我们的I.MX6ULL终结者开发板上. 平台:i.MX6ULL开发板 前言 本 ...
- imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程
当Linux开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: /de ...
- s3c6410 jpeg编码 linux,立宇泰ARMSYS6410开发板推出三个linux系统版本
ARMSYS6410采用了Linux-2.6.28作为标准版的linux内核,其中集成了丰富的驱动资源,充分展现S3C6410的各项特性,包括硬件编解码.2D/3D加速.显示协处理.TVOUT输出.视 ...
- OK6410开发板学习之安装linux系统至开发板
说来惭愧,OK6410开发板自从买来就一直在躺灰,当时连教程也花了1千多大洋了,近来感觉前途迷茫,遂决定将其拿出来研究研究,看是否能够给我新出路. 废话不多说,先上一张OK6410开发板大图: 不要问 ...
- 开发板通过usb连linux,虚拟机Linux系统和开发板通过USB转串口连接的两种方法
通过USB转串口连接虚拟机中的Linux系统和开发板,开始时候总是出现错误,显示什么串口重叠,最后求助高手帮我通过其他连接方式解决了问题,今天在网上查找资料,终于明白了开始错误的原因:开发板提供的驱动 ...
最新文章
- 实验三:实现一个大素数生成算法
- 细说Java主流日志工具库
- java console press any key_请问在JAVA中怎么实现在控制台下press any key to continue的功能?...
- 解决css firefox火狐浏览器IE浏览器下的兼容性问题
- Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
- 9月第1周国内IT技术类网站:CSDN覆盖数持续走低
- SQL工作笔记-达梦存储过程及时间触发器实现自动生成数据
- 2016 China Collegiate Programming Contest Final
- JMeter中如何实现跨线程组关联
- linux系统工程师修改打开文件数限制代码教程。服务器运维技术
- @RequestParam
- web服务-Axis2的安装
- ktt算法 约化_svm算法 最通俗易懂讲解
- 敬业签云便签提示“基础连接已关闭,发送时发生错误”如何解决
- AT89S8253片内EEPROM字节读、字节写、页读、页写驱动代码、注意事项及注释
- java 蓝牙打印_Android - 将收据打印到蓝牙打印机
- Vuetify中的v-pagination如何实现分页
- Markdown 语法学习
- 主动学习(active learning)
- .NET Core使用Cookie做身份验证
热门文章
- Android:日常学习笔记(8)———开发微信聊天界面
- 【并行计算-CUDA开发】GPGPU OpenCL/CUDA 高性能编程的10大注意事项
- 命令行批量修改IP并ping测试
- C#——orm-FulentData(sqlite3)——异常捕获
- 完美解决:Could not open the editor: Editor could not be initialized
- E60的存储空间不足? NO
- oracle 12 跟踪,Oracle 12C 块修改跟踪(Block chage tracking) 功能
- 游戏筑基开发之变量、运算符、转义字符的注意点(C语言)
- 多线程例题练手(c入门)
- 自然语言处理理论与实战