linux内核分析与移植,内核分析移植

1.make menuconfig

添加对s3c2440的支持

system  type--> s3c2440 machine--> smdk2440

2.  __lookup_machine_type

处理uboot传来的 machine id 获得一个 表示该id的 machine_desc 结构体

smdk2440的 machin_desc  结构体的定义如下/arch/arm/mach-s3c2440/mach-smdk2440.c

MACHINE_START(S3C2440, "SMDK2440")

/* Maintainer: Ben Dooks  */

.phys_io = S3C2410_PA_UART,

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

.boot_params = S3C2410_SDRAM_PA + 0x100,

.init_irq = s3c24xx_init_irq,

.map_io  = smdk2440_map_io,

.init_machine = smdk2440_machine_init,

.timer  = &s3c24xx_timer,

MACHINE_END

3. setup_arch函数

函数的目的 处理uboot传来的tag 参数

__lookup_machine_type          获取machine_desc-->boot_params

parse_tags(tags )              根据获得的 boot_params 对tags    初步处理

__tagtable(ATAG_MEM, parse_tag_mem32); 内存参数处理函数的定义

在全局结构变量meninfo结构中增加内存的描述

__tagtable(ATAG_CMDLINE, parse_tag_cmdline);命令行参数(bootargs)处理函数的定义

将命令行字符串拷贝为 default_command_line

parse_cmdline(cmdline_p, from);  进一步处理 default_command_line

__early_param("mem=", early_mem);    当bootargs里有 men=xxx 时执行early_men函数 进行处理

__early_param("initrd=", early_initrd); 当bootargs里有 initrd=xxx 时执行early_initrd函数进行处理

paging_init(&meminfo, mdesc);  对上边的 meninfo结构处理

--> devicemaps_init(mdesc);

-->(mdesc->map_io())  这里的mdesc就是上边的 machine_desc 结构体

map_o  就是smdk2440_machine_init()

smdk2440_machine_init()代码如下  该函数主要用于 设置外部晶振12000000

该函数在mach_smdk2440.c中定义

static void __init smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

s3c24xx_init_clocks(16934400);

s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

4.parse_args()

setup_arch()函数并没有全部处理完tag参数 比如 ttySAC0= XXX

这个函数会继续处理 并对已处理的参数进一步处理

5.console_init()

该函数依次调用 __con_initcall_start 与 __con_initcall_end之间定义的每个函数

这些函数用宏 console_initcall( fn )定义  例如console_initcall(s3c24xx_serial_initconsole)

s3c24xx_serial_initconsol函数在/dev/serial/s3c2410.c中定义

-->register_console(&s3c24xx_serial_console);  //向内核注册控制台

s3c24xx_serial_console 为一个结构体

6.修改MTD分区

MTD---内存技术设备

7.驱动对设备的识别

内核确定设备的信息 加载驱动时将驱动程序与设备信息比较

如果驱动和某个设备匹配 则通过该驱动操作这个设备

内核里设备的信息用 结构体表示

设备       struct platform_device {

const char * name;

u32  id;

struct device dev;

u32  num_resources;

struct resource * resource;

};

驱动        struct platform_driver {

int (*probe)(struct platform_device *);

int (*remove)(struct platform_device *);

void (*shutdown)(struct platform_device *);

int (*suspend)(struct platform_device *, pm_message_t state);

int (*suspend_late)(struct platform_device *, pm_message_t state);

int (*resume_early)(struct platform_device *);

int (*resume)(struct platform_device *);

struct device_driver driver;

};

10. 默认的arm的mtd的分区在arch/arm/plat-s3c24xx/common-smdk.c文件中的smdk_default_nand_part结构体里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Samba服务器简介及自动挂载配置案例

一、简介 Samba是一个工具套件,在Unix上实现SMB(Server Message Block)协议,或 者称之为NETBIOS/LanManager协议。SMB协议通常是被windows系列用来实现磁 盘和打印机共享。 SMB应用功能 SAMBA 最初发展的主要目就是要用来沟通Windows 与 Unix…

Ruby:字符集和编码学习总结

背景 Ruby直到1.9版本才很好的支持了多字节编码,本文简单总结了今天学习的关于Ruby编码方面的知识。 字符串可以使用不同的编码 在.NET中字符串的编码是一致的,Ruby允许字符串有不同的编码,当时我就在想:如果两个不同编码的字符串…

Android之退出应用关闭项目每个Activity的总结

思路 我们先封装好一个类叫MyApplication这个类,把这个类设置为单例模式,只有一个对象,然后在这个类里面写一个能装Activity的集合,相当于一个栈,然后每次有activity的时候,就去压进栈,当我要退出应用程序的时候,我们就把不为空的Activity都finish()掉,然后再杀死进程…

Redis持久化RDB和AOF区别

RDBRDB是Redis内存到硬盘的快照,用于redis持久化,创建RDB二进制文件,将存储在内存中的数据,持久化的放到硬盘中,当我们需要这些数据的时候,启动载入RDB文件,数据将会被存入内存中,其…

央视力荐的这套书,让5岁孩子看漫画,秒懂物理,学习早“开窍”!

▲ 点击查看今年的高考,不得不说,一度被浙江学霸刷屏!他总分720分,物理等3门满分的成绩,最终获得“浙江高考状元”。状元能摘得桂冠,除了日积月累的不断努力外,最重要的是,不断调整自…

linux c语言编程内嵌汇编,gcc编译c语言中内嵌汇编

gcc编译c语言中内嵌汇编--AT&T and Intel 汇编语法对照寄存器命名:AT&T: %eaxIntel: eaxAT&T 语法源地址在左侧,目的地址在右侧与Intel 方式语法相反将eax值传入ebxAT&T: movl %eax, %ebxIntel: mov ebx, eaxAT&T 语法在立即数前有…

fstab各项参数及ls-l 长格式各项信息

/etc/fstab 下各个参数的解释 #############################################################################[rootlinux-svn ~]# cat /etc/fstab LABEL/ / ext3 defaults 1 1LABEL/boot /boot …

ajax跨域请求的问题

使用getJson跨域请求,需要向服务器发送一个参数callback? $.getJSON("http://appcenter.mobitide.com/admin/appSearch.php?callback?",{keyboard: keyboardval,searchget:1,page:1}.... $(function(){$(#search_btn).click(function (){var keyboardva…

栈和队列之设计一个有getMin(得到最小值)功能的栈

有2中方案,分别用类和内部类实现了 import java.util.Stack;/*** @author chenyu 第一种设计:* 题目:设计一个有getMin功能的栈,设计一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作* 要求:1 pop push getMin操作的时间复杂度都是O(1)* …

MongoDB基本操作(增删改查)

2019独角兽企业重金招聘Python工程师标准>>> 基本操作 基本的“增删查改“,在DOS环境下输入mongo命令打开shell,其实这个shell就是mongodb的客户端,同时也是一个js的编译器,默认连接的是“test”数据库。 【出错】 首先…

Kubernetes + .NET Core 的落地实践

1容器化背景本来生活网(benlai.com)是一家生鲜电商平台,公司很早就停止了烧钱模式,开始追求盈利。既然要把利润最大化,那就要开源节流,作为技术可以在省钱的方面想想办法。我们的生产环境是由 IDC 机房的 1…

传说中的宇宙最水诺奖得主:本科历史学,却凭借“一纸”博士论文摘取诺贝尔物理学奖,出道即巅峰!...

全世界只有3.14 % 的人关注了爆炸吧知识他,到底是不是最水的诺奖得主?超模君曾经介绍了学历史,最终成为数学、物理大牛的威滕(传送门),然而竟出现了德布罗意姥爷的高分点赞!那今天,超…

linux 连接两个异构网,如何在Linux(或异构)网络上共享计算机?

在有关共享计算机的这两篇文章中的第 1 部分中,我描述了我的异构本地网络以及如何使用它来比较和测试不同操作系统和体系结构上的应用程序。有几种技术使一台工作站上的用户可以运行位于另一台工作站上的应用程序。SSH 提供到远程计算机的文本终端;可以使…

图片处理--熔铸特效

1、算法 r r*128/(gb 1);g g*128/(rb 1);b b*128/(gr 1);2、代码实现 public Bitmap render(Bitmap bitmap){if(bitmap null)return null;int width bitmap.getWidth();int height bitmap.getHeight();int[] pixels new int[width * height];bitmap.getPixels(pixels ,0…

栈和队列之用2个栈实现一个队列

import java.util.Stack;/*** @author chenyu* 题目:编写一个类,用2个栈实现一个队列,支持队列的基本操作(add poll peek)* 思路:栈的特点是先进后出,而队列是先进先出,我们用两个栈真好把顺序反过来实现类似队列的操作,如下,将1-5依次压入stackPush,* 再讲5-1倒入st…

Windows按名称排序问题

偶然发现一个按名称排序的文件夹内,文件顺序是混乱的,例如: 在一个文件夹内建立如下三个文件: 0F.txt 1A.txt 02.txt 按名称/升序排列, 将得到上述结果,0F在最前,02在最后。 百思不得其解&#…

作业四:产品同质化问题

产品同质化问题 首先,产品同质化的定义:产品在消费者选择购买的过程中由于其功能性利益与竞争产品相同可以被竞争对手所替代,竞争对手就成为我们的替代性产品。我们的产品和竞争对手的产品形成了产品的同质化(引用自百度百科 如今…

基于事件驱动架构构建微服务第13部分:使用来自Apache KAFKA的事件并将投影流传输到ElasticSearch...

原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part13-read-model-projection-project-streams-into-elasticsearch/在本教程中,我将展示如何从KAFKA读取流并将流投影到ElasticSearch中。我必须使用来自KAF…

惊呆了!这篇论文全文都是脏话,可编辑部居然对它评价极佳并发表了!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自:募格学术你见过最奇奇怪怪的论文是什么?一教授为了抗议三流科学杂志发送垃圾邮件,回复了一篇全文只重复七个脏话字眼的论文,可没想到的是,它竟然还被 出!版…

linux daemon守护线程,线程8--守护线程Daemon

packagebook.thread;/*** Daemon(守护)线程* Daemon线程区别一般线程之处是:* 只有虚拟机中的用户线程(非Daimon线程)全部结束,Daemon线程就会立即结束,并且也不会调用finally里的语句。* daemon线程所产生的所有线程都是daemon的*/publicclassDaemon {s…