linux内核开发板启动流程
来源:互联网 发布:淘宝代购利润是多少 编辑:程序博客网 时间:2024/06/05 09:32
声明:本文章是整理网上的资料和自己的理解
很早买了tiny6410开发板,内核使用配置好的,在内核Linux 2.6源码中包含了S3C6410 的驱动,最近想在自己的板子上移植Linux内核(内核源码没有中相关的配置),一直找不到思路,不知道Linux内核如何启动去配置相关的驱动的,在阅读内核启动的流程过程中(重点关注针对不同板子的驱动的加载流程,参考网上文章和博客),发现Linux的的板级的驱动流程,在此根据自己的理解整理,由于本人的技术有限,如果有错误的地方,望请大家提出。OK,现在进入正题。
一、boot到load kernel的过程(略)
二、kernel到板级驱动(S3C6410为例)
Linux进入到kernel后进入 \init\main.c文件,调用函数过程start_kernel->setup_arch->setup_machine,setup_macine函数:
其中这个语句list = lookup_machine_type(nr);,使用arm汇编语言去找机器的类型,也就是板子的架构,汇编语言在head-common.s中:
BootLoader在引导启动内核的时候需要设置3个寄存器
r0– 0
r1 – 板子的ID号
r2 – 内核的参数链表地址,也就是TAG链表
代码中r3 = r5 + MACHINFO_TYPE=machine_desc结构中定义的nr成员,__lookup_machine_type函数将这个r1寄存器中的机器类型ID与machine_de sc结构中的nr成员比较,如果相等则表示找到了匹配的machine_desc结构,于是返回它的地址(存于r5中),如果__arch_machine_begin和__arch_ machine_end间所有machine_desc结构的nr成员都不等于r1寄存器中的值,则返回0(r5等于0)。
接下来是结构体定义:
原型:
其中__attribute__((__section__(".arch.info.init")))放在__section__(".arch.info.init")是初始化的数据,uboot根据.nr = MACH_TYPE_# #_type的数据,也就是MACH_TYPE_S3C2440这个对应的数值,返回给lookup_machine_type函数做参数,找到machine_desc对应的数据。
nr的具体定义是在/arm/arch/tools/mach-types上面:
- linux内核开发板启动流程
- linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- Linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- Linux内核启动流程
- Linux 内核启动流程
- linux内核启动流程
- Linux 内核启动流程
- Linux内核启动流程
- Centos下执行定时任务Crontab命令介绍
- php通过获取头信息判断图片类型
- 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法
- PHP计算中文字符串长度 、截取对应中文字符串
- [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)
- linux内核开发板启动流程
- 【重头学习Android】 关于Activity生命周期
- 径向基网络(RBF network)之BP监督训练
- js数组进阶
- android elicipse常用快捷键
- .net中axWinsock 监听多个客户端
- myeclipse设置utf-8格式
- magento web services API之sales_order.list
- iOS常用的高效开发宏