linux 驱动
yuzhoudiwang
这个作者很懒,什么都没留下…
展开
-
struct resource
linux对挂接在4G总线空间上的设备实体的管理方式 -- struct resource/usr/src/linux-2.6.21.5/include/linux/ioport.hstruct resource { resource_size_t start; resource_size_t end; const char *name;转载 2013-09-09 15:33:41 · 962 阅读 · 0 评论 -
linux gcc 内嵌汇编
通常嵌入到 C 代码中的汇编语句很难做到与其它部分没有任何关系,因此更多时候需要用到完整的内联汇编格式,即汇编模板:__asm__ __volatile__ ("asm statements" : outputs : inputs : registers-modified); __asm__ 表示后面的代码为内嵌汇编,asm 是 __asm__ 的别名。__volatile__ 表示编原创 2013-11-19 22:14:58 · 1188 阅读 · 0 评论 -
gcc LDR指令和伪指令
ARM汇编中ldr伪指令和ldr指令 简单来说:LDR指令用来从内存和寄存器之间传输数据,LDR伪指令用于传递大于8位的立即数; ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如: ldr r0, 0x1234567转载 2013-11-21 15:26:13 · 1784 阅读 · 1 评论 -
ubuntu DNW安装
1.下载Linux下DNW的PC端USB驱动和写入工具,文件名: dnw_linux.tar.bz2 2. 编译PC端USB驱动和写入工具$ tar -xvf dnw_linux.tar.bz2其中secbulk.c是PC端USB驱动, dnw.c是写入工具3. 编译并加载secbulk.c内核模块$cd secbulk$make -C /lib/modules/`una原创 2013-11-23 14:48:44 · 1302 阅读 · 0 评论 -
linux 理解contain_of
container_of宏定义在[include/linux/kernel.h]中/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the type of the conta原创 2013-11-09 17:43:27 · 1818 阅读 · 0 评论 -
设备号
设备号,是内核标识字符设备的唯一标志;设备号分为主设备号和次设备号;在inode中保存着设备号,用来标识设备,从VFS中找到相应的设备;1.主设备号的动态分配:alloc_chrdev_region()/** * alloc_chrdev_region() - register a range of char device numbers * @dev: output原创 2013-11-10 14:17:08 · 1004 阅读 · 0 评论 -
内核驱动错误
1.引用空指针:今天写了个内核模块,在写相应的应用层函数调试时,出现下面的错误,经定位出现在open函数中。open函数只是对file的私有指针进行赋值。最后经查找发现,字符设备申请的设备号与系统存在的设备号相冲突,经改变设备号,此问题被解决。[root@EmbedSky sky]# ./dev_test hello worldUnable to handle kernel原创 2013-11-10 22:55:54 · 1055 阅读 · 0 评论 -
linux-2.6.30-4内核头文件
1、/linux-2.6.30.4/arch/arm/include/asm/1.1、--->对应__raw__write()和__raw__read()等的使用1.2、 ----> /* copy_to_user, copy_from_user */1.3、:系统头文件,定义了设置或修改描述符/中断门等的嵌入式汇编宏。2、/linux-2.6.30.4/inlude/linux/转载 2013-11-10 23:48:26 · 1023 阅读 · 0 评论 -
编译内核
内核编译实验环境:Ubuntu 10.04 内核版本 2.6.32-36-generic过程概述:下载源码:下载链接:http://www.kernel.org/pub/linux/kernel/v2.6/配置内核:make menuconfig编译内核:make bzImage编译内核模块:make modules安装内核模块:make modules转载 2013-11-10 23:53:34 · 959 阅读 · 0 评论 -
gcc内嵌汇编调用C函数
C样式的函数使用堆栈传递输入值;C库函数也是如此;所有输入参数都要放入堆栈中,顺序和函数中提到的顺序相反;汇编中压入栈中函数参数的顺序,和参数列表中函数出现的顺序相反;代码如下所示:C中函数printf的使用如下:printf("The answer is %d\n", k);汇编的版本是这样的:pushl kpushl $outputcall printfaddl $原创 2013-11-21 10:19:54 · 3958 阅读 · 0 评论 -
GDB调试ARM
一.下载gdb-6.7.tar.gz源代码http://ftp.gnu.org/gnu/gdb/二.编译 GDB#tar zxvf gdb-6.7.tar.gz2.1 编译GDB#cd gdb-6.7#./configure --target=arm-softfloat-linux-gnu --prefix=/usr/local/arm-gdb#make注意转载 2013-11-16 11:00:24 · 1770 阅读 · 0 评论 -
uboot 烧写地址为什么是0x30000000
今天做内核移植,准备添加NAND flash的驱动,做到MTD分区时,想起在一本书上看到的一句话,说的是分区时每个区之间没有间隙,前一个区的结束地址是后一个区的起始地址。可是当我看我的开发板的教程时,分区如下:static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name转载 2013-09-29 16:25:24 · 3078 阅读 · 0 评论 -
free 命令结果完全剖析
相信有许多同学都对free命令中的buffers cached十分不理解,今天笔者就对free命令机器结果做一个详细的剖析。以下是笔者在虚拟机上运行的debian系统的free情况。该虚拟机内存只有128M,同时分配了256M的SWAP交换区。 total used free shared buffers cachedMem: 12转载 2013-10-01 15:58:49 · 772 阅读 · 0 评论 -
strace 移植
使用strace可以跟踪程序执行时系统调用的相关信息,因此它是一个功能非常强大的调试和分析诊断工具。由于MINI2440的Linux系统中并没有包含程序,所以需要自己移植,整个移植过程非常简单。1. 从SourceForge上下载strace的代码,http://sourceforge.net/projects/strace/2. 解压 tar xvjf strace-4.5.20.tar原创 2013-10-01 16:43:19 · 1210 阅读 · 0 评论 -
DDD 调试
DDD,全称是Data Display Debugger,对于Linux系统中的编程人员来说,它就是windows系统下面的visual studio ,功能强大,数Linux世界中少数有图形界面的程序调试工具,今天小编就来介绍下如何使用这个工具,关于DDD软件工具的安装和打开方法,可以查看本文最后参考资料中列出的经验文档。方法/步骤 1调试前的准备工作:制作一个程转载 2013-10-01 17:20:19 · 1980 阅读 · 0 评论 -
用Codeviz分析linux内核
Codeviz是一款开源的用于自动生成C/C++源程序调用关系图的工具,其下载地址为http://www.csn.ul.ie/~mel/projects/codeviz/#downloadCodeViz的实现原理是通过给GCC打补丁,而且不同版本的CodeViz对应的GCC的版本也不一致。 本文使用的是codeviz-1.0.12版本,codeviz-1.0.12.tar.gz。 解压原创 2013-10-03 22:50:18 · 1491 阅读 · 1 评论 -
undefined reference to `__aeabi_unwind_cpp_pr0'
连接时出错: D:\Program Files (x86)\DS-5\bin\led_on_c>makearm-none-linux-gnueabi-gcc -g -c -o crt0.o crt0.Sarm-none-linux-gnueabi-gcc -g -c -o led_on_c.o led_on_c.carm-none-linux-gnueabi-ld -Ttext 0转载 2013-11-15 12:04:06 · 1137 阅读 · 0 评论 -
linux 内核中的高级编程方法
1. 结构体的成员,用#include定义,按照预编译的方法,include包含的文件,将在结构体重展开;struct cache_sizes malloc_sizes[] = {#define CACHE(x) { .cs_size = (x) },#include CACHE(ULONG_MAX)#undef CACHE};原创 2013-11-01 10:17:40 · 821 阅读 · 0 评论 -
LINUX NFS
1、首先安装nfs服务 sudo apt-get install nfs-kernel-server2、然后配置nfs: sudo vim /etc/exports在里面添加 /home/linux/nfs *(rw, sync, no_root_squash)前面一部分是你要共享的目录,*表示所有客户都可以访问,你也可以限定ip, rw是操作权限,sync是同步,如果客户机修改了文件转载 2013-11-16 11:01:49 · 875 阅读 · 0 评论 -
warning: conflicting types for built-in function 'puts'
编译器版本】arm-linux-gcc 3.4.1【问题描述】在做嵌入式底层开发时,自己写了一个puts函数,也就是通过串口发送字符串到超级终端。但在编译程序的时候出现了如下问题:warning: conflicting types for built-in function 'puts'【问题分析】在C语言标准中,有些通用函数被定义为built-in转载 2013-12-11 13:14:14 · 1848 阅读 · 0 评论