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结构体里

linux内核分析与移植,内核分析移植相关推荐

  1. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...

    从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...

  2. Linux内核的Nand驱动流程分析

    最近在做Linux内核移植,总体的感觉是这样的,想要彻底的阅读Linux内核代码几乎是不可能的,至少这还不是嵌入式学期初期的重要任务.内核代码解压后有250M左右,据统计,有400多万行,而且涉及到了 ...

  3. 十六.linux开发之Kernel移植——内核的配置和编译原理

    有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=d25dbce79566963e3699574a74048154& ...

  4. Linux内核IP Queue机制的分析(一)

    将会通过包括本文在内的三篇文章,对IP Queue机制从用户态的应用到内核态的模块程序设计进行分析.三篇文章的题目分别是: Linux内核IP Queue机制的分析(一)--用户态接收数据包 Linu ...

  5. linux收发包内核进程名称,Linux内核IP Queue机制的分析(一)——用户态接收数据包...

    序 笔者将会通过包括本文在内的三篇文章,对IP Queue机制从用户态的应用到内核态的模块程序设计进行分析.三篇文章的题目分别是: Linux内核IP Queue机制的分析(一)­--用户态接收数据包 ...

  6. linux系统移植---内核移植(3)

    linux内核移植 参考:https://blog.csdn.net/qq_27516841/article/details/80565622 内核开源下载网站:www.kernel.org 一.前言 ...

  7. 十七.linux开发之Kernel移植——内核的启动过程分析

    有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=e68caf68c259bc3491dd7f8c4ac4bb99& ...

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

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

  9. 【移植Linux 3.4.2内核之四】修改内核代码支持YAFFS文件系统

    上一篇文章,我们从0制作jffs2文件系统,因为我们的内核本身就支持iffs2文件系统,但是它不支持yaffs文件系统.今天我们就来修改内核代码,让内核支持yaffs文件系统的格式. 1.首先我们获取 ...

  10. Linux内核 eBPF基础:kprobe原理源码分析:源码分析

    Linux内核 eBPF基础 kprobe原理源码分析:源码分析 荣涛 2021年5月11日 在 <Linux内核 eBPF基础:kprobe原理源码分析:基本介绍与使用>中已经介绍了kp ...

最新文章

  1. EDA电子设计技术与应用
  2. 文档扫描仪的构建——使用Python,OpenCV应用透视变换来获得图像的自顶向下的“鸟瞰图”
  3. Elasticsearch使用BulkProcessor批量插入
  4. python 用lambda表达式代替简单的函数, 匿名函数
  5. 《架构探险——从零开始写Java Web框架》这书不错,能看懂的入门书
  6. mvc html validator,ASP.NET MVC实现Validation验证器扩展
  7. php划分年龄段,儿童时期是怎样划分年龄阶段的
  8. 阶乘和(信息学奥赛一本通-T1173)
  9. 基于权重的节点驱逐 - Oracle RAC 12.2 新特性
  10. 神经网络技巧篇之寻找最优参数的方法【续】
  11. C# 访问mongodb数据库
  12. 来自联通302的问候
  13. WPF 动态添加控件以及样式字典的引用(Style introduction)
  14. PB通过VDN实现Http上传、下载
  15. 2020中兴捧月-傅里叶-丰收祭赛题常规解法
  16. MPEG-TS封装格式数据
  17. 学术-物理-维空间:一维空间
  18. 期货涨跌与什么有关(期货和股市涨跌有关系吗)
  19. 5G产业——新智能时代革命
  20. linux大作业聊天室报告,Linux聊天室系统期末大作业.docx

热门文章

  1. ASP.NET Core 2.2 项目升级至 3.0 备忘录
  2. [译].Net中的内存-什么分配在了哪里
  3. TIOBE 6月排行:C# 以微弱的优势超过了 Visual Basic .NET 的排名,再次进入 TOP 5
  4. 为您的机器配置开发环境
  5. 现身说法:实际业务出发分析百亿数据量下的多表查询优化
  6. Visual Studio 2017 与 Visual Studio for Mac 支持更新
  7. Entity Framework中的字符串插值引发担忧
  8. C#在Linux+Mono环境中使用微信支付证书
  9. 实验2 java_《Java程序设计》实验2
  10. 【数据库原理及应用】经典题库附答案(14章全)——第八章:数据库并发控制