ARM+Linux
tin39
这个作者很懒,什么都没留下…
展开
-
bus,device,driver三者关系【转载】
bus:总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议。如PCI,USB,1394,IIC等。任何设备都可以选择合适的总线连接到主机。当然主机也可能就是CPU本身。内存也是通过BUS连接到主机的,可内存使用的总线不是外设总线,因此和内存使用相同类型的总线的设备,谈及BUS比较含糊。一块网卡在嵌入式开发中,直接通过内存总线接入到CPU。我们在写网卡驱动时,要给该BUS定义就麻烦原创 2009-04-23 21:50:00 · 340 阅读 · 0 评论 -
linux进程控制-wait()
#include /* 提供类型pid_t的定义 *//sys/types.h#include //sys/wait.hpid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返转载 2009-07-08 09:34:00 · 191 阅读 · 0 评论 -
arm linux内核修改积累
2.6.28.6内核修改分区:arch/arm/plat-s3c24xx/common-smdk.c看门狗驱动:drivers/watchdog/s3c2410_wdt.c 2.6.12内核修改分区:arch/arm/mach-s3c2410/devs.c原创 2009-07-09 10:02:00 · 226 阅读 · 0 评论 -
arm2440+linux看门狗使用心得
1.bootloader中看门狗在通过USB下载时被用作一个16us的定时器,时间到触发一个中断,下载完成后看门狗关闭。2.可在linux启动前启动看门狗,不过默认的linux驱动加载时会对其重新初始化,初始化其频率并关闭。可以手动将关闭去除,还可以设置频率,若复位延时超出限制,可在dmesg中观察到出错信息。而且超出该限制后打开看门狗就会立即重启,估计寄存器溢出的原因,而真正写入寄存器的是低原创 2009-09-15 11:14:00 · 2140 阅读 · 1 评论 -
Linux I2C核心、总线与设备驱动
Linux I2C核心、总线与设备驱动本章导读I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部转载 2009-11-19 17:00:00 · 384 阅读 · 0 评论 -
用Crosstool 制作交叉编译工具链
一:下载 Crosstool http://kegel.com/crosstool/ 解压到downloads文件夹 apt-get install bison apt-get install flex二:进入解压后的Crosstool vim Demo-arm-softflaot.sh 修改如下两行: TARBALLS转载 2010-01-18 14:11:00 · 1594 阅读 · 0 评论 -
数据类型的问题
吐血调了一个晚上,结果是unsigned char 和char的问题。 当类型是char型,凡是0x80以上,即最高位是1的数据,通过"%02x"打印后会在前面填充6个‘f’,即变成ffffff87这样的数据。 而换成unsigned char型则打印正常。 但是在ARM的linux上之前没有遇到这样的问题。看来对于平台还有编译器还是原创 2010-03-03 08:58:00 · 302 阅读 · 0 评论 -
文件系统移植问题记录
1、dev目录下面未建立pts目录,会导致telnet无法登录。2、mdev -s会建立设备节点,但是当设备移除后无法删除节点,看了busybox的编译选项也选择了热插拔支持的选项,不知道是否还有什么没配置好,采用udevd就正常了,使用udevd必须要内核支持Inotify file change notification support。3、在rcS启动时要将devfs挂载到dev目录原创 2010-03-09 19:44:00 · 294 阅读 · 0 评论 -
S3C2442开发记录
1、原先用于2440的bootloader可以不做改动运行于2442之上,从手册上看S3C2442较2440少了一个AC97的外设,少许地方做了修改。2、三星提供的UBOOT在16M晶振的核心板的硬件环境下能够正常运行,而修改UBOOT的晶振频率到12M,启动时打印的信息有很多的乱码,估计还有哪块没有配置好,或者整个UBOOT的部分地方的频率不匹配。3、bootloader进入内核时会调用原创 2010-03-12 08:22:00 · 940 阅读 · 1 评论 -
修正2.6.24内核对于6410无法使用reboot的问题
linux-2.6.24内核对于S3C6410的支持貌似不是很好。单纯地从发送reboot命令重启系统来看,发送reboot后,内核并没有真正的去调用看门狗。只是执行了如下的一条语句(源码在"include/asm/arch/system.h"中):__raw_writel(0x6400, S3C24XX_VA_SYSCON + S3C6400_SW_RESET_OFF);原创 2009-12-30 16:27:00 · 302 阅读 · 0 评论 -
2440文件系统制作所见之问题
今天要调WLAN,由于要向cramfs文件系统中添加一个库,想偷懒一把,直接将ARM中的文件系统拷贝出来,然后再加入库,结果出现了问题,比如mount,echo等程序无法使用。 结果发现,从ARM拷贝到windows下会将所有链接丢失。所以,重新用busybox制作了下文件系统。 文件系统虽然运行起来,结果首先发现vsftpd无法运行,其他应用程序也无法运行,开始怀疑是原创 2010-01-07 16:30:00 · 262 阅读 · 0 评论 -
Linux网络编程一步一步学-select详解
select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a file descriptor for the转载 2009-06-29 14:55:00 · 175 阅读 · 0 评论 -
Linux下的C编程实战之文件系统编程
1.Linux文件系统 Linux支持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在这些具体文件系统的上层,Linux提供了虚拟文件系统(VFS)来统一它们的行为,虚拟文件系统为不同的文件系统与内核的通信提供了一致的接口。下图给出了Linux中文件系统的关系: 在Linux平台下对文件编程可以使用两类函数:(1)Linux操作系统文转载 2009-06-24 09:46:00 · 603 阅读 · 0 评论 -
异常处理的入口
linux在trap_init函数中设置各种异常处理的向量,如中断向量。通过调用在arch/arm/kernel/entry-armv.S中的代码来设置异常中断的入口。 .equ stubs_offset, __vectors_start + 0x200 - __stubs_start .globl __vectors_start__vectors_start: swi原创 2009-04-23 21:52:00 · 317 阅读 · 0 评论 -
获取Linux时间,微秒级
#include #include int gettimeofday(struct timeval *tv,struct timezone *tz); 功能:将目前的时间以tv所指的结构返回。 struct timeval{ long tv_sec;//秒 long tv原创 2009-05-06 18:45:00 · 2319 阅读 · 0 评论 -
Linux变量声明
今天调程序,由下层程序下上层程序发送A包,怎么发都不对,发现包长有问题,结果发现声明了一个临时变量send_len,初始化的时候他的值竟然是0x0A,而不是0x00,感觉与原来的飞思卡尔的平台不同。难怪以前用数组的时候里面莫名其妙竟然有"LINUX"字符。所以,最好养成声明变量即初始化的好习惯!原创 2009-05-07 13:32:00 · 390 阅读 · 0 评论 -
理解dup和dup2(转)
理解dup和dup2 理解dup和dup2(转) 相信大部分在Unix/Linux下编程的程序员手头上都有《Unix环境高级编程》(APUE)这本超级经典巨著。作者在该书中讲解dup/dup2之前曾经讲过“文件共享”,这对理解dup/dup2还是很有帮助的。这里做简单摘录以备在后面的分析中使用:(1) 每个进程原创 2009-05-12 08:51:00 · 237 阅读 · 0 评论 -
linux printf貌似有BUG
写虚卡调用的的时候在程序中处理SC0包,应该会处理68步,但是30多步(会有细微变动)后一大段打印信息莫名丢失了,但是上层测试程序仍能收到R包,说明中间的处理还是进行了的。如果每次处理延时0.1s,所有答应信息都会显示。 使用了dup重定向,将打印信息都写到文件中,不用延时,所有的打印信息都能正确显示。 所以感觉应该是printf的缓冲问题。解决方法暂时不明。。。原创 2009-05-12 09:47:00 · 342 阅读 · 0 评论 -
linux nand flash驱动的一点理解
1、通过自旋锁的方式来获得与设置flash的状态。在加锁后,若if (!chip->controller->active) 成立,即不活动,则chip->controller->active = chip;将其的活动状态变为本flash,并且如果chip->state == FL_READY成立,即空闲则将其设置为我们需求的状态,再解锁,锁防止了在设置状态过程中被抢占。获取与配置flash状态在n原创 2009-07-30 14:15:00 · 241 阅读 · 0 评论 -
linux的一些定义
信号量: IPC_EXCL 和IPC_CREAT一起使用时,当已经存在队列时,则返回失败(防止关键字重复) SETVAL(设置信号量的值) IPC_RMID(删除信号灯).原创 2009-08-14 17:19:00 · 181 阅读 · 0 评论 -
arm+linux 串口传送数据(正确版)
之前,利用RXD,TXD回环来读取发送的数据,原先的初始化有问题(见异常版),经常中间夹杂莫名的数据,改用下面的初始化和发送、接收函数,一切正常了。两个还未进行对比,等有空闲的时候做下对比。#include #include #include #include #include #include #include #include #include /* the原创 2009-06-16 17:16:00 · 1880 阅读 · 2 评论 -
串口初始化异常版
初始化异常。#include #include #include #include #include #define FALSE -1#define TRUE 0int speed_arr[] = { B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300, //原创 2009-06-16 19:03:00 · 638 阅读 · 0 评论 -
arm linux 设置非标准波特率
由于内核和交叉编译环境中预定义的都是标准的波特率,所以需要设置非标准的波特率如8777,需要修改内核和交叉编译环境。可将不用的原先定义的好波特率改掉,比较保险。 内核修改: include/asm/termbits.h 95行 B150->B8777 drivers/char/tty_io.c 2536行 150->8777原创 2009-06-16 19:33:00 · 1546 阅读 · 0 评论 -
关于Linux的视频编程
<br />前言:目前正在忙于ARM平台的Linux应用程序的开发(其实是刚刚起步学习啦)。底层的东西不用考虑了,开发板子提供了NAND Bootloader,和Linux 2.6的源码,而且都编译好了。自己编译的bootloader可以用,但是Linux编译后,文件很大,暂且就用人家编译的系统,先专心写应用程序吧。。<br />正文:要做的任务是,把一块板子上的摄像头采集的图像和声卡采集的声音(貌似很啰嗦哈)通过TCP/IP协议传输到另一块板子上。第一步,先把视频获取并且在本地LCD上显示。看了板子提供的转载 2010-07-14 14:01:00 · 504 阅读 · 1 评论