http://blog.sina.com.cn/embeddedlinux[订阅][手机订阅]
个人资料
访客
读取中...
评论
读取中...
分类
    内容读取中…
博文

提供打过实时补丁的linux.2.6.26.6内核,可在任何现有linux平台上运行。

详细指导如何在现有linux平台上移植时补丁的linux.2.6.26.6内核,能明显提升系统实时反应能力,大幅度减低中断延迟,实现了准硬实时的系统。帮助在x86系统上运行,也可以运行在arm, mips等系统架构上 。提供如何去写实时linux下的学习代码,以及官方学习资料和测试实时性的工具。

最新ucosii 2.86 TCPIP, WEBSERVER 超级 8051 开发板 + x86平台上运行另外4个主流实时操作系统

一套开发板的价值不在于硬件周围有多少的外围设备, 真正的价值在于软件以及技术支持.而软件的技术竞争核心就在于操作系统。

 

 

CP命令的实现(2008-05-14 11:24)

下面介绍两种CP命令的实现方法。

方法一:使用文件读写函数readwrite。(为了让程序更直观,省略出错处理)

#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

 

下面的代码来自 2.6.25 中的s3c2410fb.c

 

static struct fb_ops s3c2410fb_ops = {
 .owner  = THIS_MODULE,
 .fb_check_var = s3c2410fb_check_var,
 .fb_set_par = s3c2410fb_set_par,
 .fb_blank = s3c2410fb_blank,
 .fb_setcolreg = s3c2410fb_setcolreg,
 .fb_fillrect = cfb_fillrect,
 .fb_copyarea = cfb_copyarea,
 .fb_imageblit = cfb_imageblit,
};

细心的读者可以看到这些文件操作中并没有 open , read ,write mmap, 这些其实是在fbmem.c中已经注册了.具体的代码如下: 

作者 jorya_txj

email: jorya_txj@hotmail.com

以下代码是linux 2.6.25 内核 中 的文件上s3c2410fb.c中的内容, 在platform总线以名字 .name = 's3c2410-lcd', 匹配后便会自动运行函数s3c2410fb_probe.

 

static int __init s3c24xxfb_probe(struct platform_device *pdev,
      enum s3c_drv_type drv_type)
{

 
 struct s3c2410fb_info *info;
 struct s3c2410fb_display *display;
 struct fb_info *fbinfo;
 struct s3c2410fb_mach_info *mach_info;
 struct resource *res;
 int ret;
 int irq;
 int i;

作者:Ronnie 手机:13761598350 E-mail:ghnghnghnghn@163.com

 

网络传输是当今世界的一大主流,因此网卡驱动也自然而然在各类驱动中占领了一席之地。下面我们就简短地来说一下CS8900网卡驱动移植到Linux kernel的一些问题。

一般来说,我们在编译kernel时,设备驱动的选择有两种方式:一种是直接编译到kernel里,另一种是以模块方式挂接。CS8900网卡驱动

作者: jorya_txj

email:jorya_txj@hotmail.com

 

大家知道cpu 处理数据的时候可能是以小端(little endian) 或者以大端(big endian)的格式.比如x86下是以小端处理数据的, 但是 SPARC and 68k 系列处理器是大端的,这样就带来一个大端转换小端的问题.

 

下面来看一组kernel 里的函数,怎么把cpu本地的字节序转换成大端或者小端.或者小端和大端怎么转换成cpu本地的字节序.

 To convert from the processor's native format into little-endian form you can use the    following functions:

 

   1 __le64 cpu_to_le64(u64);
   2 __le32 cpu_to_le32(u32);

作者: jorya_txj

email:jorya_txj@hotmail.com

大家知道不同的体系架构,内存中的页大小是不一样的.甚至在arm不同体系架构中页的大小也是不一样的,

为了驱动的可移植性,我们怎么去做呢.kernel 里有两个参数,来描述页大小一个是PAGE_SHIFT 还有是PAGE_SIZE.

参照下面的表格看看就知道了.

 

Architecture

PAGE_SHIFT

PAGE_SIZE

i386

12

4K

MIPS

12

4K

Alpha

13

8K

作者: jorya_txj

email:jorya_txj@hotmail.com

作嵌入式软件工作的人,很有可能要为几个不同的平台些驱动,比如x86系统和arm系统.随之而来的问题是怎么写出几个平台间通用的驱动,或者是最大限度的去重用代码呢?

首先第一点是, 那数据基本类型重新定义,格式按照如下,这样的话不管是32为系统或者64为系统代码都可以移植.

u8    unsigned byte (8 bits) 
u16   unsigned word (16 bits)
u32   unsigned 32-bit value
u64   unsigned 64-bit value

s8    signed byte (8 bits)
s16   signed word (16 bits)
s32   signed 32-bit value
s64   sign

指导老师:jorya_txj

作者:Ronnie 手机:13761598350 E-mail:ghnghnghnghn@163.com

 

 

图片幻灯