embedded linux tips

转载 2007年10月08日 14:30:00
|--------------|
|    dd        |
|--------------|
用途:做disk image,或者mbr。

用法举例:
dd if=/dev/fd0 of=disk.img bs=1440k
if=file,输入文件名,缺省为标准输入。
of=file,输出文件名,缺省为标准输出。
bs=bytes,同时设置读写块的大小为bytes。


|-------------------------|
|    嵌入式linux特性      |
|-------------------------|
常规linux在实时性上的缺陷:
  1.linux使用时间片来调度CPU时间;
  2.linux计时器的精度不够;
  3.大部分的Linux的核心进程是不能中断;
  4.linux支持虚拟内存用于分页机制;
  5.中断切换采取关中断的方式来对临界区处理,很慢;
这些表现在:
  1.中断延迟;(2.4的内核是不可抢占的,中断的优先级是最高的,也就是说你必须等待上一个处理结束,这样对realtime process是不能容忍的,2.6是可以抢占的,但还是有太多的preempt-disable的地方)
  2.进程上下文切换慢;
  3.spinlock不可抢占,直接空等,这样导致等待时间加长(in Timesys linux,spinlock is replaced by mutex which can be preeempted)。
4.各种lock机制不爽,比如说rwlock,rcu,big kernel lock(hold too long time),brlock(big read lock)...都有各种限制和缺陷。
5.memory barrier.
  6, virtual memory reduce the performance(due to page default).
  7,close interrupt is a big performance cost.(In RTLinux,it use soft measure to handle closing interrupt)

实时改进:
  1.去掉虚拟内存机制;  (vxworks)
  2.内核可抢占;(inside 2.6 kernel)
  3.单块内核,减少ring0/3切换开销;(vxworks)

rtlinux解决方案:(自己修改kernel)
  通过一个vm来替换linux的底层中断程序,real kernel与linux kernel共享控制cpu.
  设计更好的可抢占的任务调度器;
  改进时钟;

timesys linux:
将中断(irq & softirq)线程化(interrupts as threads,Solaris,SunOS5.0也是如此处理),并赋予一定的priority,realtime task have high level priority than irq.
not need to close irq.
  resource reservation mechanism.



|------------------|
|    mtd技术       |
|------------------|
使用flash保存数据需要两步:
1.flash disk设备:
/dev/mtd0-/dev/mtd16(偶数,9个char device来驱动flash)
2.文件系统:(0,1,2,7四个block device)
/dev/mtdblock1对应/,flash
/dev/mtdblock7对应/etc/config,nvram

过程如下:
mknod mtd0 c 90 0
mknod mtdblock0 b 44 0
ftl_format /dev/mtd0
mkfs /dev/mtdblock0
insmod xx
insmod yy



|-----------------------------------|
|    linux驱动demo                  |
|-----------------------------------|
#define XXmajorID 60
#define BASEADDR  0x7E000000
#define LEN       0x8000

unsigned short *pbase;

module_init(xx_init);
module_exit(xx_cleanup);

struct file_operations xx_fops = {
    ioctl: xx_ioctl,
    open: xx_open,
    release: xx_release,
};

static int __init xx_init(void)
{
    register_chrdev(XXmajorID, "xxdev", &xx_fops);
    pbase = ioremap(BASEADDR, LEN); //设备的io空间 
}

static void __exit xx_cleanup(void)
{
    unregister_chrdev(XXmajorID, "xxdev");
    iounmap(pbase);
}

int xx_ioctl (struct inode *inode, struct file *filp,
                 unsigned int cmd, unsigned long arg)
{
    //cmd是IOCTL码
    //arg是个unsigned char *地址;
    copy_from_user(...); //从app读取内存到kernel
    copy_to_user(..);    //kernel传数据给app
    return 0;
}

int xx_open (struct inode *inode, struct file *filp)
{return 0;}

int xx_release(struct inode *inode, struct file *filp)
{return 0;}

编译Makefile:
CC=gcc
LD=ld
CFLAGS=
DFLAGS=-DMODULE -D__KERNEL__ -DLINUX -Wall -O2

xx.o:xx.c
 $(CC) %(CFLAGS) $(DFLAGS) -c $< -o $@

后话:
可将module加入到kernel编译中,编写config.in,加入对我们module driver的信息支持,加入一个定义宏;然后make menuconfig选中刚才我们定义的宏;然后在drivers下的Makefile加入对我们编译后的驱动程序目标文件的支持;然后在/drivers/char/mem.c文件chr_dev_init函数中,加入对我们driver的初始化函数调用;然后在文件系统中mknode即可. 

Qt/Embedded编译与安装

本文介绍了Qt/Embedded的编译与安装的详细详细过程,包括简要介绍了Qt/Embedded的安装的前期准备——交叉编译链的安装,tslib 的编译与安装。对Qt/Embedded的./confi...
  • KwanSampson
  • KwanSampson
  • 2015年11月18日 01:08
  • 2591

layer ui插件显示tips时,修改字体颜色

今天做调查问卷,又遇到一个蛋疼小问题,记录下。 调查问卷有很多选项是要求必填的,如果不填的话,需要给出友好的提示。用的如下组件:http://layer.layui.com/ 1、之前一直默认用的...
  • wodeai1235
  • wodeai1235
  • 2017年03月07日 14:19
  • 4429

一些技巧吧!Unity Tips(日常使用)

孙广东 2015.10.30 1、按组件名称搜索 场景的hierarchy 层次结构, 就是得到 使用了这个组件的对象 2、如何查找文档快捷方式(就是很快的方式找到 组件的文档) ...
  • u010019717
  • u010019717
  • 2015年10月30日 08:51
  • 3255

Embedded Linux UART的使用-基本介绍

origin: http://bbs.chinaunix.net/thread-2288557-1-1.html 本帖最后由 amarant 于 2011-03-23 21:15 编...
  • yazhouren
  • yazhouren
  • 2015年05月23日 09:42
  • 393

关于embedded linux的使用、开发、学习的一点自已的体会

很多初学embedded linux的兄弟姐妹对现在网上的各种各样的教程都弄糊涂了,特别是在ARM9一片火热的时候,出了一大批2410/2440的核心板,功能功板,所带的号称最全、特全的说明,其实是对...
  • ycdhonker
  • ycdhonker
  • 2014年08月04日 16:15
  • 696

Cross Compiling Python for Embedded Linux

Cross Compiling Python for Embedded Linux Posted by Paul Gibson on 16 November 2011, 2:48 pm Th...
  • gxp
  • gxp
  • 2012年04月17日 09:54
  • 785

Embedded Linux: Using Compressed File Systems

http://lwn.net/Articles/219827/ This series is all about making small systems, from the kerne...
  • frank2336
  • frank2336
  • 2012年01月19日 19:17
  • 792

Qt for Embedded Linux Display Management

Qt for Embedded Linux Display Management When rendering, the default behavior for each Qt for E...
  • pcliuguangtao
  • pcliuguangtao
  • 2012年03月09日 16:34
  • 609

something about Compile and Link on Embedded Linux

1 , Compile 流程 2,The `##' preprocessing operator performs token pasting #define mypr...
  • jslywj
  • jslywj
  • 2013年11月06日 16:51
  • 657

【QT】Qt for Embedded Linux Architecture

1、简介Qt for Embedded Linux(Qt4.8),是用于嵌入式设备(Linux)的开发GUI和应用程序的C++框架,提供了一个轻量级的窗口系统(QWS)以及标准的Qt API,基本架构...
  • iEearth
  • iEearth
  • 2017年07月05日 21:56
  • 980
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:embedded linux tips
举报原因:
原因补充:

(最多只允许输入30个字)