博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核运行之前访问IO
阅读量:5051 次
发布时间:2019-06-12

本文共 1545 字,大约阅读时间需要 5 分钟。

如果要在内核运行之前访问CPU的某些IO端口,直接使用指针方式定义寄存器进行操作即可。例如,在解压内核的时候喂狗,通过操作IO进行,可以这样操作:

在arch/arm/boot/compressed/misc.c文件:
 
    307     arch_decomp_setup();
    308
    309     makecrc();
    310     *((volatile unsigned long *)0x40E00054) &= (~(3<<28)); //ABING GPAF0_L
    311     *((volatile unsigned long *)0x40E0001C) = (1<<14); //ABING GPDR0
    312     *((volatile unsigned long *)0x40E00024) = (1<<14); //ABING GPCR0
    313     putstr("Uncompressing Linux...");
 
  314     *((volatile unsigned long *)0x40E00018) = (1<<14); //ABING GPSR0
    315     gunzip();
 
  316     *((volatile unsigned long *)0x40E00024) = (1<<14); //ABING GPCR0
    317     putstr(" done, booting the kernel.\n");
    318     return output_ptr;
 
 
 
 
参考include/asm-arm/arch-pxa/uncompress.h文件访问串口的代码:
12#define           ((volatile unsigned long *)0x40100000)  13#define           ((volatile unsigned long *)0x40200000)  14#define           ((volatile unsigned long *)0x40700000)  15  16#define               17  18  19static  void (char )  20{  21        while (!([5] & 0x20));  22        [0] = ;  23}  24  25/*  26 * This does not append a newline  27 */  28static void (const char *)  29{  30        while (*) {  31                (*);  32                if (* == '\n')  33                        ('\r');  34                ++;  35        }  36}
 
 
可以这样定义:
#define __raw_readl(a)    (*(volatile unsigned int *)(a))#define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v))#define __raw_readw(a)    (*(volatile unsigned short *)(a))#define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v))

转载于:https://www.cnblogs.com/elect-fans/archive/2012/04/28/2475210.html

你可能感兴趣的文章
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
.net 写文件上传下载webservice
查看>>
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
查看>>
Ubuntu 环境变量
查看>>
一步一步学MySQL-日志文件
查看>>
bzoj3994: [SDOI2015]约数个数和
查看>>
hdu5306 Gorgeous Sequence
查看>>
Android中使用ListView实现下拉刷新和上拉加载功能
查看>>
proc文件系统的简介
查看>>
连续自然数和
查看>>
[SDOI2015]星际战争
查看>>
用好lua+unity,让性能飞起来——luajit集成篇/平台相关篇
查看>>
JS控制页面跳转
查看>>