
学习嵌入式
文章平均质量分 74
zhaigch
fdsafd
展开
-
linux块驱动程序分析 之 nand flash 驱动编写过程分析
内核版本号:linux-2.6.22 块设备程序: driver/mtd/mtdblock.c 1 从驱动的注册函数开始分析 a.先定义并初始化一个全局变量 mtdblock_tr static struct mtd_blktrans_ops mtdblock_tr = { .name = "mtdblock", .major = 31, .part_b原创 2012-12-24 11:31:48 · 1356 阅读 · 0 评论 -
移植Linux-3.4.2到开发板gq2440
移植 linux-3.4.2 笔记 1. tar -xjf linux-3.4.2.tar.bz2 cd linux-3.4.2 修改Makefile find -name "*defconfig" 列出所有默认的开发板的配置 make s3c2410_defconfig 在顶层目录生成.config make menuconfig make uImage原创 2012-12-15 16:04:46 · 1446 阅读 · 0 评论 -
关于ARM7软中断的那个小事 2011年11月25日
1 读取软中断标号的方法: 软件中断由专门的软中断指令SWI 触发,SWI 指令后面跟一个中断编号,以标识可能共存的多个软件中断程序。在C 程序中调用软件中断需要用到编译器的扩展功能,使用关键字“__swi”来声明中断函数。注意软中断号码同时在函数定义时指定。__swi(0x24) void my_swi (void);这样当调用函数my_swi 的时候,就会用“SWI 0x24”来代替普通的原创 2012-12-15 16:04:23 · 596 阅读 · 0 评论 -
字符型驱动1 注册加载与卸载,读写与控制IOCTL的使用
/* 关于内核模块读写函数中的最后一个参数loff_t *f_pos的说明: 这个参数的默认值为0,该变量一但修改后,再使用读 或 写函数时,这个参数的值就是修改后的值。 可以用这个值来修改copy_to_user copy_from_user 的指针的偏移。 另外对于file->f_pos 这个值默认也是0,如果没有手动修改它,它会一值为0。 使用这个变量也可以修改上述两个函数的指针的原创 2012-12-15 16:04:27 · 558 阅读 · 0 评论 -
PIC18F4520单片机AD转换程序与注释
/*包含头文件:该头文件位于D:\Program Files\Microchip\mplabc18\v3.40\h下,这下面是不同型号的单片机的头文件定义,使用时把相应的头文件包含进来就可以了*/#includeconst unsigned char seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴型数据管0-9的字段原创 2012-12-15 16:04:34 · 5081 阅读 · 0 评论 -
uboot-2012-4.1移植 (一)分析uboot
1 cd board/samsung/ cp smdk2410/ smdk2440/ -rf cp smdk2410.h smdk2440.h cd ../../ 修改boards.cfg 仿照 smdk2410 arm arm920t - samsung原创 2012-12-15 16:04:42 · 663 阅读 · 0 评论 -
linux块设备驱动之make_request与request 分别创建内存虚拟磁盘
APP:read write 文件 保存到磁盘 -------------------------------- (文件系统)VFS虚拟文件层 -------------------------------- block块驱动 core核心驱动程序 -------------------------------- 硬件相关的驱动程序,完成扇区的读写 文件系统调用底层驱动: ll_r原创 2012-12-21 12:03:12 · 2434 阅读 · 0 评论 -
linux设备驱动之 i2c设备驱动 at24c08驱动程序分析
linux-2.6.22源码分析\linux-2.6.22\drivers\i2c\chips\eeprom.c为例,分析i2c设备驱动程序的原理 1.从驱动的入口函数开始分析 eeprom_init >i2c_add_driver(&eeprom_driver) >i2c_register_driver(THIS_MODULE, driver)原创 2013-01-09 18:19:43 · 1740 阅读 · 0 评论 -
linux内核init启动过程分析(一)
linux内核启动过程分析(一) 从 源码目录/init/main.c开始分析 asmlinkage void __init start_kernel(void) //__init表示这个函数的代码放在__init段中,这个段在arch/arm/kernel/vmlinux.lds.S链接文件中定义 1-> ......中间省略了很多其他的初始化设置 1-> rest_init()原创 2013-05-30 21:37:36 · 1811 阅读 · 0 评论 -
Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_kernel() --2>setup_arch(&command_line);//该函数位于arch/arm/kernel/setup.c //在这个函数中定义了一个描述原创 2013-08-14 17:30:31 · 1269 阅读 · 0 评论 -
uboot-2012-4.1移植 (2)修改uboot代码
3 修改代码 a 修改start.s中时钟设置部分。 /*修改这里,时钟设置不正确*/ /* FCLK:HCLK:PCLK = 1:4:8 */ /*设置时钟*/ ldr r0,=0x4c000014 mov r1,#0x05 str r1,[r0] /* 如果HDIVN非0,CPU的总线模原创 2012-12-15 16:04:44 · 1249 阅读 · 0 评论 -
1 red hat linux 9下建立C开发环境
今天,老板给了个2410的试验箱,让我搞一下。实验指导书上用的是red hat linux 9。我本不想用这个linux,年代太久了,而且也很丑,个人观点。打算用red hat enterprise 5.可是NFS挂载总是出问题。挂上后,运行主机上的程序或拷贝东西时,就卡住了!很郁闷,最后也没有解决。可能是实验箱上用的也是Linux2.4的内核的原因吧。于是我也换成了red hat linux 9原创 2012-12-15 16:04:29 · 543 阅读 · 0 评论 -
ADS中防止全局变量被优化
在ADS中,当你定义了一个全局变量时,在使用的过程中,尤其是在判断这个变量时,一定要小心全局变量被优化! 因为当你的程序判断这个全局变量时,而这时你的这个全局变量恰好被别的外设或中断给修该了。。。这时你就悲剧了,虽然你的程序逻辑上是没有问题的,但是由于编译器会对你的代码做出优化!所以编译出来的程序不会对这种情况(外设或中断修改了全局变量)做出你想要的反应。 怎么解决这个问题呢?ADS中给出了一原创 2012-12-15 16:04:25 · 1457 阅读 · 0 评论 -
linux块设备驱动程序分析之 nor flash驱动分析 以及使用内存模拟 nor flash
struct map_info { char *name; unsigned long size; resource_size_t phys; #define NO_XIP (-1UL) void __iomem *virt; void *cached; int bankwidth; #ifdef CONFIG_MTD_COMPLEX_MAPPINGS map_w原创 2012-12-25 18:03:50 · 1796 阅读 · 0 评论 -
dm9000网卡的linux驱动分析
分析内核自带的dm9000网卡驱动程序: static struct platform_driver dm9000_driver = { .driver = { .name = "dm9000", .owner = THIS_MODULE, }, .probe = dm9000_probe原创 2012-12-27 19:35:44 · 887 阅读 · 0 评论 -
PIC18F4520的ADC与LCD1602显示程序
/*说明:该程序使用的开发环境为:microchip公司的MPLAB X IDE v1.41、mplabc18-v3.40 在该环境下编译成功、在proteus7.5中进行仿真成功。 ADC使用的是通道1,液晶模块的RS、R/W、E、D0~D7与PIC18F4520的C0、C1、C2、RD0~RD7 相连接。仿真时,RE3需要拉高电平,否则AD转换无法进行。*/#in原创 2012-12-15 16:04:36 · 2923 阅读 · 0 评论 -
我常用的Linux指令
1 登录字符登录 CTRL+ALT+F1 图形登录 CTRL+ALT+F72 添加用户 useradd 用户名3 修改密码 passwd [选项] [用户名]4切换用户 su [选项][用户名]5 关机 shutdown now6拷贝 cp [选项][源文件或目录 目的地] 拷贝目录 cp -r *** ***7 移动或更名 mv [选项] *** *** 相当于剪切8 删除原创 2012-12-15 16:04:38 · 411 阅读 · 0 评论 -
移植Linux-2.6.22到GQ2440上
移植 linux-2.6.22 1 解压 find -name "*defconfig" 修改顶层 Makefile ARCH ?= arm CROSS_COMPILE ?= arm-linux- make s3c2410_defconfig make menuconfig make uImage tftp 下载到sdram 运行,乱码2 修改代码原创 2012-12-15 16:04:49 · 979 阅读 · 0 评论 -
LCD驱动设计与分析 --GQ2440+LTV350QV_F04 + LINUX2.6.22内核
LCD使用的是LTV350QV_F04 参数设置见4_th_ok程序中的设置 程序中使用了 .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, .fb_imageblit = cfb_imageblit,三个由驱动模块提供的函数:所以:make menuconfig----->device driver ----> graph原创 2012-12-15 16:04:51 · 2034 阅读 · 0 评论 -
51上移植UC/OS II 2011年11月12日
在keil c移植UCOSII有两个比较特殊的地方。1、局部变量的覆盖问题。2、函数的再入性问题。下面我就这两方面谈一下自己的体会。1、关于局部变量的覆盖。在PC机上的C编译器,一般是这样,在函数调用时临时给局部变量在堆栈空间中分配地址,函数返回后释放在堆栈中分配的空间。如果一个函数被递归调用,每次调用时局部变量分配的地址空间都不相同,因此不存在局部变量被覆盖的问题。又由于局部变量是分配在堆栈空间原创 2012-12-15 16:04:21 · 540 阅读 · 1 评论 -
2多线程的阻塞、唤醒与同步
转载!原文: http://apps.hi.baidu.com/share/detail/19786281 http://hi.baidu.com/boobleoo0/blog/item/5f935039a37c58f8b311c77f.html http://topic.youkuaiyun.com/u/20110105/16/12717238-9816-4571-a03d-e8b603724946.ht原创 2012-12-15 16:04:32 · 567 阅读 · 0 评论 -
ARM的step内存到SDRAM内存代码复制程序调试之罪魁祸首 ADR与LDR
start.S启动的汇编代码#define S3C2440_MPLL_200MHZ ( (0x5C#define MEM_CTL_BASE 0x48000000 .text.global _start_start: /*1关看门狗*/ mov r0,#0x53000000 mov r1,#0 str r1,[r0] /*2设置时钟*/ ldr r0,=0x4C000014 mov r1,#原创 2012-12-15 16:04:40 · 666 阅读 · 0 评论 -
个人总结日记:ltv350三星LCD并行接口接2440处理器的linux驱动程序移植
ltv350三星LCD并行接口接2440处理器的linux驱动程序移植 总体上分三步: 1> framebuffer_alloc函数分配一个fb_info类型的结构体 该结构体用于填充描述使用的液晶参数,比如像 像素类型,是否有硬件加速, 长宽,每个像素的位数,调色板等。 其中主要填充fix与var这两个成员结构体变量,这两个结构体在应用程序中 可以通过ioctl函数的命令字原创 2014-12-23 20:42:07 · 976 阅读 · 0 评论