关于嵌入式设备上的Linux 系统开发

[11-20 15:52:47]   来源:http://www.88dzw.com  arm嵌入式   阅读:8998

文章摘要:unsigned long rootdev; /* 16: Number representing the root device */unsigned long initrd_start; /* 64: starting address of initial ramdisk *//* This can be either in flash/dram */unsigned long initrd_size; /* 68: size of initial ramdisk */}请注意:这些数表示定义字段的参数结构中的偏移量。这意味着如果引导装载程序将参数结构放置在地址 0xc0

关于嵌入式设备上的Linux 系统开发,标签:arm嵌入式系统,arm系统,http://www.88dzw.com

  unsigned long rootdev;       /* 16: Number representing the root device */

  unsigned long initrd_start;  /* 64: starting address of initial ramdisk */

  /* This can be either in flash/dram */

  unsigned long initrd_size;   /* 68: size of initial ramdisk */

  }

  请注意:这些数表示定义字段的参数结构中的偏移量。这意味着如果引导装载程序将参数结构放置在地址 0xc0000100,那么 rootdev 参数将放置在 0xc0000100 + 16,initrd_start 将放置在 0xc0000100 + 64 等等 ― 否则,内核将在解释正确的参数时遇到困难。

  正如上面提到的,因为从引导装载程序到内核的参数传递会有一些约束条件,所以大多数 2.4.x 系列内核期望参数以已标记的列表格式传递。在已标记的列表中,每个标记由标识被传递参数的 tag_header 以及其后的参数值组成。标记列表中标记的常规格式可以如下所示:

  清单 4. 样本标记格式。内核通过 <ATAG_TAGname> 头来标识每个标记。

  #define <aTAG_TAGNAME>  <Some Magic number>

  struct <tag_tagname> {

  u32 <tag_param>;

  u32 <tag_param>;

  };

  /* Example tag for passing memory information */

  #define ATAG_MEM        0x54410002  /* Magic number */

  struct tag_mem32 {

  u32     size;               /* size of memory */

  u32     start;              /* physical start address of memory*/

  };

  setup_arch 还需要对闪存存储库、系统寄存器和其它特定设备执行内存映射。一旦完成了特定于体系结构的设置,控制就返回到初始化系统其余部分的 start_kernel 函数。这些附加的初始化任务包含:

  设置陷阱

  初始化中断

  初始化计时器

  初始化控制台

  调用 mem_init ,它计算各种区域、高内存区等内的页面数量

  初始化 slab 分配器并为 VFS、缓冲区高速缓存等创建 slab 高速缓存

  建立各种文件系统,如 proc、ext2 和 JFFS2

  创建 kernel_thread ,它执行文件系统中的 init 命令并显示 lign 提示符。 如果在 /bin、/sbin 或 /etc 中没有 init 程序,那么内核将执行文件系统的 /bin 中的 shell。

  设备驱动程序

  嵌入式系统通常有许多设备用于与用户交互,象触摸屏、小键盘、滚动轮、传感器、RA232 接口、LCD 等等。除了这些设备外,还有许多其它专用设备,包括闪存、USB、GSM 等。内核通过所有这些设备各自的设备驱动程序来控制它们,包括 GUI 用户应用程序也通过访问这些驱动程序来访问设备。本节着重讨论通常几乎在每个嵌入式环境中都会使用的一些重要设备的设备驱动程序。

  帧缓冲区驱动程序

  这是最重要的驱动程序之一,因为通过这个驱动程序才能使系统屏幕显示内容。帧缓冲区驱动程序通常有三层。最底层是基本控制台驱动程序 drivers/char/console.c,它提供了文本控制台常规接口的一部分。通过使用控制台驱动程序函数,我们能将文本打印到屏幕上 ― 但图形或动画还不能(这样做需要使用视频模式功能,通常出现在中间层,也就是 drivers/video/fbcon.c 中)。这个第二层驱动程序提供了视频模式中绘图的常规接口。

  帧缓冲区是显卡上的内存,需要将它内存映射到用户空间以便可以将图形和文本能写到这个内存段上:然后这个信息将反映到屏幕上。帧缓冲区支持提高了绘图的速度和整体性能。这也是顶层驱动程序引人注意之处:顶层是非常特定于硬件的驱动程序,它需要支持显卡不同的硬件方面 ― 象启用/禁用显卡控制器、深度和模式的支持以及调色板等。所有这三层都相互依赖以实现正确的视频功能。与帧缓冲区有关的设备是 /dev/fb0(主设备号 29,次设备号 0)。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  下一页


Tag:arm嵌入式arm嵌入式系统,arm系统arm嵌入式

《关于嵌入式设备上的Linux 系统开发》相关文章

分类导航
最新更新
热门排行