快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

   

本文适用于

ADSP-BF561

uclinux-2008r1.5-rc3

vs2008

   

欢迎转载,但请保留作者信息

 

前一阵子,将 uclinux 内核在 vs2008 下折腾了一道,现发布正式的工程文件,供有需要的朋友参考。

1.1.1    vs-fs 是什么?

这个工程用于将 uclinux 内核的部分代码移植到 vs2008 下编译并模拟其运行,包括内存管理,设备管理和文件系统这三个部分的代码,删除了进程管理之类的功能。希望它能帮助对 uclinux 内核中这三个部分结构和算法的理解!

本工程仅用于研究之用!

下载地址:

http://sf.net/projects/vs-fs/

http://download.csdn.net/users/lights_joy/

1.1.2    为什么做这个工作?

使用 uclinux 将近两年了,深感使用之不易,内核理解之难。虽然有不少文档,但是对于自己的理解帮助不大。于是乎渴望有一工具能方便的对内核进行调试,在调试中理解内核的工作过程,将 uclinux 内核移植到 visual dsp ,初衷就是如此,这个工程,也是如此。

visual dsp 下调试内核,固然比较全面,但是其编译下载过程偏慢,于是乎希望求助于虚拟机,不过目前还没有一个虚拟机可以完整地模拟 blackfin 平台,只能放弃。

中间使用了一段时间的 code::blocks ,也将内核的内存管理这一块移植到 code::blocks 下,只是仍然觉得 c::b 的调试手段仍然不够完善,尤其在和 VS2008 相比较的情况下,仍然觉得痛苦。

最后瞄上了 vs2008 ,是不是有点夸张?呵呵!因为自认为对 C uclinux 内核的掌握已经足以做这个移植的工作,所以就上马了 ………

1.1.3    原始内核版本

本项目所用的原始内核为 bfin-uclinux-2008R1.5 ,可以从 http://blackfin.uclinux.org/ 下载,适用于 BLACKFIN 系列 DSP

1.1.4    对内核的修改

1.1.4.1              语法部分

这个主要是内核中大量使用 C99 语法定义结构体变量,比如:

static struct file_system_type sysfs_fs_type = {

     /*.name       =*/ "sysfs" ,

     /*.fs_flags =*/ 0,

     /*.get_sb     =*/ sysfs_get_sb,

     /*.kill_sb    =*/ kill_litter_super,

};

这个只能对照着一个个地修改。

1.1.4.2              gcc 内置函数 /

主要是 likely unlikely 两个宏定义:

#define likely(x)  __builtin_expect(!!(x), 1)

#define unlikely(x)    __builtin_expect(!!(x), 0)

直接修改为:

#define likely(x)  (x)

#define unlikely(x)    (x)

1.1.4.3              功能配置的宏

内核中使用了很多 CONFIG_xxx 这样的宏进行功能配置,为此在每个 .c 文件的开头加上:

#include <config.h>

将相关的宏定义都放在这个头文件里面。

1.1.4.4              内存的模拟

uclinux 内核使用 flat 方式管理内存,并用几个全局变量指出可用内存的起始位置和结束位置,为此,使用 malloc 分配 64M 内存,并将这几个全局变量分别指向这个内存块的起始位置和结束位置。

1.1.4.5              rootfs

为了验证文件系统的正确性,工程中使用了一个 rootfs.initramfs 的根文件系统,这个文件系统在 linux 下编译而来。在工程中直接读取整个文件,并将头指针传递给 populate_rootfs ,在原始的内核中 rootfs 是放在内核可管理的 RAM 中的,但本工程则独立于 uclinux 可管理的内存块。

1.1.5    下一个版本的计划

在下一个版本中,计划加上其它的文件系统支持,如 ext 等,然后模拟加上一层硬件驱动,这样此工程将可以用于在 windows 下读写其它格式分区的文件,也可以用于读写嵌入式系统中的特色文件系统如 YAFFS 或者 JFFS 之类的,再也不必千篇一律地采用 VFAT

1.1.6    理想中的内核开发工具

使用 VS2008 IDE ,调用 gcc 进行内核的编译,加上虚拟机进行内核的调试。支持内核的自动配置,即在配置完成后能够自动生成 vs2008 的工程文件。

不过如果以一人之力,怕是难以见到这一天了 ~~~~~~~~~

 

 

 

 

 

 

Logo

更多推荐