offst 的作用及使用方法

1. phys_io 与 io_pg_offst

我们在移植BSP的时候需要填充 machine_desc 结构体,其中有两个字段 phys_io 和 io_pg_offst,如下红色加粗部分:

MACHINE_START(W90P950EVB, "W90P950EVB")
.phys_io = W90X900_PA_UART,
.io_pg_offst = (((u32)W90X900_VA_UART) >> 18) & 0xfffc,

.boot_params =  0x100,
.map_io  = nuc950evb_map_io,
.init_irq = nuc900_init_irq,
.init_machine = nuc950evb_init,
.timer  = &nuc900_timer,
MACHINE_END

在linux2.6.38中已经没有phys_io与io_pg_offs这两个变量,后面的文章会分析这个问题,现在就来分析linux2.6.35中在machine_desc结构体中,有关phys_io和io_pg_offst变量的作用以及使用方法,在介绍phys_io和io_pg_offst变量的作用之前,我们先来熟悉一些machine_desc这结构体:

[cpp]

struct machine_desc {    /*    * Note! The first four elements are used    * by assembler code in head.S, head-common.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);   };  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzjfs.html