ram_nor.c源码:
//参考: drivers\mtd\chips\map_ram.c
#include "linux/module.h"
#include "linux/types.h"
#include "linux/kernel.h"
#include "linux/sched.h"
#include "linux/init.h"
#include "asm/io.h"
#include "asm/byteorder.h"
#include "linux/errno.h"
#include "linux/slab.h"
#include "linux/delay.h"
#include "linux/interrupt.h"
#include "linux/reboot.h"
#include "linux/bitmap.h"
#include "linux/mtd/xip.h"
#include "linux/mtd/map.h"
#include "linux/mtd/mtd.h"
#include "linux/mtd/compatmac.h"
#include "linux/mtd/cfi.h"
#define RAM_BLOCK_SIZE (512*1024)
static unsigned char *ramnor_buf;
static struct mtd_info *ram_nor_mtd;
static int ram_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
{
int i;
unsigned char *buf = ramnor_buf + instr->addr;
static int cnt = 0;
printk("%s : %d\n", __FUNCTION__, cnt++);
for (i = 0; i < instr->len; i++)
{
buf[i] = 0xff;
}
instr->state = MTD_ERASE_DONE;
mtd_erase_callback(instr);
return 0;
}
static int ram_nor_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
{
static int cnt = 0;
printk("%s : %d\n", __FUNCTION__, cnt++);
printk("thread: pid = %d, name = %s\n", current->pid, current->comm);
memcpy(buf, ramnor_buf+from, len);
*retlen = len;
return 0;
}
static int ram_nor_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
{
static int cnt = 0;
printk("%s : %d\n", __FUNCTION__, cnt++);
memcpy(ramnor_buf+to, buf, len);
*retlen = len;
return 0;
}
static void ram_nor_sync_nop(struct mtd_info *mtd)
{
}
static int ram_nor_init(void)
{
ramnor_buf = kmalloc(RAM_BLOCK_SIZE, GFP_KERNEL);
memset(ramnor_buf, 0xff, RAM_BLOCK_SIZE);
// alloc/setup mtd_info
ram_nor_mtd = kzalloc(sizeof(*ram_nor_mtd), GFP_KERNEL);;
ram_nor_mtd->type = MTD_NORFLASH;
// Fill in the default mtd operations
ram_nor_mtd->erase = ram_nor_erase;
ram_nor_mtd->read = ram_nor_read;
ram_nor_mtd->write = ram_nor_write;
ram_nor_mtd->name = "ram_nor";
ram_nor_mtd->size = RAM_BLOCK_SIZE;
ram_nor_mtd->sync = ram_nor_sync_nop;
ram_nor_mtd->flags = MTD_CAP_RAM;
ram_nor_mtd->writesize = 1;
ram_nor_mtd->erasesize = 512;
add_mtd_device(ram_nor_mtd); // add_mtd_partitions
return 0;
}
static void ram_nor_exit(void)
{
del_mtd_device(ram_nor_mtd);
kfree(ram_nor_mtd);
kfree(ramnor_buf);
}
module_init(ram_nor_init);
module_exit(ram_nor_exit);
MODULE_LICENSE("GPL");
=====================================================================
Makefile文件:
all:
make -C /media/sda8/wei/linux-2.6.28_smdk6410 M=`pwd` modules
clean:
make -C /media/sda8/wei/linux-2.6.28_smdk6410 M=`pwd` clean
obj-m += ram_nor.o
=====================================================================
测试详情可以参考:“JZ2440之NOR FLASH驱动程序”
上一篇:OK6410默认u-boot启动参数
下一篇:OK6410块设备驱动之用内存模拟磁盘
推荐阅读
史海拾趣
Calmos Systems Inc公司注重企业文化建设和团队建设。公司倡导创新、协作、务实的企业文化,鼓励员工敢于尝试、勇于创新。同时,公司还注重员工的培训和发展,为员工提供广阔的职业发展空间和晋升机会。在团队建设方面,公司定期组织各类团建活动,增强员工之间的凝聚力和向心力。这些举措使得公司拥有一支高效、团结、富有创造力的团队,为公司的发展提供了有力保障。
以上便是关于Calmos Systems Inc公司在电子行业里发展起来的5个相关故事。这些故事展示了公司在创立初期、技术创新、市场拓展、国际化战略以及企业文化与团队建设等方面的努力和成果,为公司的发展奠定了坚实的基础。
Fastron公司一直将技术创新作为企业发展的核心动力。自创立以来,公司不断投入研发资源,致力于电感器技术的创新。Fastron生产的符合RoHS标准的高质量电感器和线圈,如AEC-Q200级产品,得到了市场的广泛认可。这些产品不仅具有高性能和长寿命,还能满足客户多样化的需求。
Fastron公司深知产品质量对于企业的重要性。因此,公司建立了严格的质量控制体系,从原材料采购到产品生产、检测等各个环节都实行严格的质量控制和管理。Fastron还引进了先进的检测设备和技术手段,确保每一款产品都符合高标准的质量要求。这种对品质的执着追求使得Fastron的产品在市场上具有极高的竞争力。
近年来,随着数字化技术的快速发展,Broyce Control也面临着新的挑战和机遇。为了适应市场的变化和客户的需求,公司开始进行数字化转型和升级。通过引入先进的生产管理系统和智能制造技术,Broyce Control提高了生产效率和产品质量。同时,公司还加强了与互联网和物联网技术的融合,推出了一系列智能化、网络化的新产品和服务。这些创新举措使得Broyce Control在数字化时代继续保持了强劲的发展势头。
这五个故事虽然基于虚构,但尽量遵循了Broyce Control公司发展的逻辑和可能趋势。它们展示了Broyce Control从创立初期到逐渐发展成为电子行业领导者的过程,以及公司在技术创新、市场扩张和行业影响力提升等方面所做的努力。这些故事旨在展现一个真实而鲜活的Broyce Control形象,同时也为读者提供了关于电子行业发展的有趣视角。
为了适应全球化的市场趋势,茂达电子制定了全面的全球化战略。公司不仅加强了与国际市场的联系,还积极寻求与国际知名企业的合作机会。同时,茂达电子还加大了对海外市场的投入,通过设立海外分支机构、参加国际展会等方式,不断提升品牌知名度和市场影响力。
这五个故事只是Anpec(茂达电子)发展历程中的一部分,但它们充分展示了茂达电子在电子行业中的崛起和成就。作为一家具有创新精神和市场洞察力的企业,茂达电子将继续致力于为客户提供优质的产品和服务,推动电子行业的持续发展。
Accetek公司创立之初,面临着激烈的市场竞争和技术挑战。然而,创始人凭借对电子行业的深刻理解和前瞻性的眼光,选择了数控雕刻机和激光雕刻机作为公司的主营业务。通过不断的技术研发和市场调研,Accetek成功推出了一系列高质量、高性能的产品,逐渐在市场中站稳脚跟。
马自达 Mazda 马自达汽车的历史开始于1920年,它坐落在日本广岛市,当时的名字为Toyo Cork Kogyo Co.。那个时候,因为第一次世界大战的影响,软木非常缺乏,公司成立的目的就是用Abemaki(一种日本树)和中国软木橡树制造软木的替代品。这原 ...… 查看全部问答∨ |
|
基于DSP Builder的fir数字滤波器的设计 这是的毕业设计题目要做3 、4、16阶的仿真 和硬件测试我一直都没做出来仿真都没做好 还请高手指导下啊 QQ314536709 邮箱[email=jiangpengtt@126]jiangpengtt@126[/email].com [ 本帖最后由 guipizi 于 2008-5 ...… 查看全部问答∨ |
转自---高工在线 根据Frost & Sullivan最新发布的研究报告,诸如氖灯以及LED灯这样的汽车配件在今后的七年内会保持一个稳定增长,尽管这一增长的速度并不快。 在报告中,这家研究机构就汽车报警器等产品的消费习惯进行了分析,发现从2006年以 ...… 查看全部问答∨ |
《嵌入式应用程序开发综合实验9例》里面的例子都是基于uCos II的。上面的平台是用44b0的开发板。这个板子算是经典的入门板子了。个人感觉一本不错的书,很注重实践,配合uCOS理论的书一起看效果不错。刚注册的帐号,不知论坛以前有没有人上传过这本 ...… 查看全部问答∨ |
|
1、三星S3C44B0X(Samsung ARM7TDMI)微处理器 2、2MB 16bit flash(SST39VF160) 3、8MB 16bit PC100/PC133兼容SDRAM 4、符合usb1.1规范USB设备控制器USBN9603 5、2路带有RS232电平转换UART接口 6、IDE接口及多功能扩展口:可挂硬盘或CompactFl ...… 查看全部问答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 04:22 编辑 上次做校内比赛的时候写的,画曲线部分参考了UCgui的写法。用来画温度曲线,伏安特性曲线等等效果挺不错 这里贴了两个关键函数。完整的在附件 /*画竖线*/ void drawVline(unsigned char x,unsigne ...… 查看全部问答∨ |