ramblock.c源碼:
// 參考drivers/block/xd.c,z2ram.c
#include "linux/major.h"
#include "linux/vmalloc.h"
#include "linux/init.h"
#include "linux/module.h"
#include "linux/blkdev.h"
#include "linux/bitops.h"
#include "linux/hdreg.h"
#define RAMBLOCK_SIZE 0x100000
static struct gendisk *ramblock_disk;
static struct request_queue *ramblock_queue;
static int major;
static unsigned char *ramblock_buf;
static DEFINE_SPINLOCK(ramblock_lock);
static int ramblock_getgeo(struct block_device *dev, struct hd_geometry *geo)
{
// 容量 = heads * cylinders * sectors *512
geo->heads = 2;
geo->cylinders = 128;
geo->sectors = RAMBLOCK_SIZE / 2 / 128 / 512;
return 0;
}
static struct block_device_operations ramblock_fops =
{
.owner = THIS_MODULE,
.getgeo = ramblock_getgeo,
};
static void do_ramblock_request(struct request_queue *q)
{
static int r_cnt = 0;
static int w_cnt = 0;
struct request *req;
//printk("do_ramblock_request %d\n", ++cnt);
while ((req = elv_next_request(q)) != NULL)
{
// 數(shù)據(jù)傳輸3要素: 源,目的,長度
// 源/目的
unsigned long offset = req->sector * 512;
// 目的/源: req->buffer
// 長度
unsigned long len = req->current_nr_sectors * 512;
if (rq_data_dir(req) == READ)
{
//printk("do_ramblock_request read %d\n", ++r_cnt);
memcpy(req->buffer, ramblock_buf+offset, len);
}
else
{
//printk("do_ramblock_request write %d\n", ++w_cnt);
memcpy(ramblock_buf+offset, req->buffer, len);
}
end_request(req, 1); // 1 - 成功
}
}
static int ramblock_init(void)
{
// 0. register_blkdev : cat /proc/devices
major = register_blkdev(0, "ramblock");
// 1. 分配gendisk
ramblock_disk = alloc_disk(2); // 0-整個磁盤, 1-第1個分區(qū)
// 2. 設(shè)置
// 2.1 設(shè)置隊列: 提供讀寫的能力
ramblock_queue = blk_init_queue(do_ramblock_request, &ramblock_lock);
ramblock_disk->queue = ramblock_queue;
// 2.2 設(shè)置屬性: 比如容量,主設(shè)備號,第1個次設(shè)備號,操作函數(shù)等
ramblock_disk->major = major;
ramblock_disk->first_minor = 0; // (major,0),(major,1),...,(major,15)
ramblock_disk->fops = &ramblock_fops;
set_capacity(ramblock_disk, RAMBLOCK_SIZE / 512);
sprintf(ramblock_disk->disk_name, "ramblock");
// 3. 硬件相關(guān)操作
ramblock_buf = vmalloc(RAMBLOCK_SIZE);
// 4. 注冊
add_disk(ramblock_disk);
return 0;
}
static void ramblock_exit(void)
{
unregister_blkdev(major, "ramblock");
del_gendisk(ramblock_disk);
put_disk(ramblock_disk);
blk_cleanup_queue(ramblock_queue);
}
module_init(ramblock_init);
module_exit(ramblock_exit);
MODULE_LICENSE("GPL");
=====================================================================
Makefile文件:
KERN_DIR = /home/linux-3.0.1
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += ramblock.o
=====================================================================
測試詳情參考:JZ2440塊設(shè)備驅(qū)動程序的編寫驅(qū)動之用內(nèi)存模擬磁盤
上一篇:OK6410塊設(shè)備驅(qū)動內(nèi)存模擬nor_flash
下一篇:OK6410之USB設(shè)備驅(qū)動程序
推薦閱讀
史海拾趣
對不起,我無法提供關(guān)于Adaptive Networks Inc公司發(fā)展的故事。
宏發(fā)公司始終堅持“以質(zhì)取勝”的發(fā)展戰(zhàn)略。早在1988年,公司就確立了“以市場為導(dǎo)向,以質(zhì)取勝”的經(jīng)營方針。為了保證產(chǎn)品質(zhì)量,宏發(fā)不僅制定了嚴(yán)格的生產(chǎn)流程規(guī)則,還在國內(nèi)行業(yè)中建成了設(shè)備最先進(jìn)的實驗室,并獲得了世界三大認(rèn)證機(jī)構(gòu)的認(rèn)證。這種對質(zhì)量的執(zhí)著追求,使得宏發(fā)的產(chǎn)品在國際市場上獲得了高度認(rèn)可,也為公司的長遠(yuǎn)發(fā)展奠定了堅實的基礎(chǔ)。
隨著技術(shù)的不斷進(jìn)步和市場需求的增長,DSP Group開始將業(yè)務(wù)擴(kuò)展到半導(dǎo)體領(lǐng)域。公司推出了一系列高性能、低功耗的DSP芯片,廣泛應(yīng)用于移動通信、智能家居、汽車電子等領(lǐng)域。這一舉措不僅進(jìn)一步鞏固了DSP Group在DSP領(lǐng)域的領(lǐng)先地位,還為公司帶來了可觀的收益和市場份額。
隨著全球市場的不斷變化和競爭的加劇,DSP Group不斷調(diào)整其全球化布局和戰(zhàn)略轉(zhuǎn)型。公司先后在德國、英國等地設(shè)立了研發(fā)中心和辦事處,加強(qiáng)了與國際市場的聯(lián)系和合作。同時,DSP Group還積極尋求與其他公司的合作和并購機(jī)會,以進(jìn)一步拓展其業(yè)務(wù)領(lǐng)域和市場份額。通過這些舉措,DSP Group在全球范圍內(nèi)建立了廣泛的銷售網(wǎng)絡(luò)和合作伙伴關(guān)系,為其未來的發(fā)展奠定了堅實的基礎(chǔ)。
以上五個故事概述了DSP Group Inc公司在電子行業(yè)中發(fā)展起來的關(guān)鍵階段和重要事件。這些故事不僅展示了DSP Group在技術(shù)創(chuàng)新、市場拓展和全球化布局方面的努力和成果,也反映了電子行業(yè)發(fā)展的趨勢和變化。
在電子行業(yè)的初期,CANDD公司憑借其創(chuàng)始人對半導(dǎo)體技術(shù)的深入研究,成功開發(fā)出了一款具有劃時代意義的芯片。這款芯片不僅性能卓越,而且成本遠(yuǎn)低于市場上的同類產(chǎn)品。憑借這一技術(shù)突破,CANDD公司迅速在行業(yè)內(nèi)嶄露頭角,吸引了大量投資者的關(guān)注。隨著產(chǎn)品銷量的不斷增長,公司逐漸擴(kuò)大了生產(chǎn)規(guī)模,并在全球范圍內(nèi)建立了銷售網(wǎng)絡(luò)。
安普康(AMPCOM)自創(chuàng)立之初,就致力于將品牌推向國際市場。隨著公司規(guī)模的擴(kuò)大和產(chǎn)品線的豐富,安普康開始實施全球商標(biāo)注冊戰(zhàn)略。從2011年首次申請安普康A(chǔ)MPCOM商標(biāo),到隨后的幾年內(nèi)在泰國、日本、新加坡、老撾、澳大利亞等多個國家成功注冊,安普康的品牌影響力逐漸擴(kuò)大。這一過程中,公司不僅面臨著不同國家法律法規(guī)的挑戰(zhàn),還需應(yīng)對文化差異和市場需求的差異。然而,憑借專業(yè)的團(tuán)隊和精準(zhǔn)的市場定位,安普康成功地將品牌推向了全球舞臺。
Agilent Fundamentals of RF and Microwave Modern receiving systems must often process veryweak signals, but the noise added by the systemcomponents tends to obscure those very weak signals.Sensitivity, bit error ratio (BER) and noise figure aresystem parameters that chara ...… 查看全部問答∨ |
長期供應(yīng)頻譜分析儀HP8563E/E4402B/E4403B/MS2665C/MS 一、 綜合測試儀 R&S CMU200(可測GSM900/1800);Agilent8960 E5515B(可測GSM900/1800/1900/GPRS);Agilnet8960 E5515C(OPT:002、003,可測GSM、CDMA);R&S CMD55(可測900/1800);R&S CMD60(DECT測試儀);MT8801B(PHS測試儀); ...… 查看全部問答∨ |
我現(xiàn)在在對話框中添加了按鈕 void xxxDlg::OnButton1() 想實現(xiàn)的功能有兩個,點擊按鈕后首先能獲取要顯示圖片的路徑,現(xiàn)在已經(jīng)實現(xiàn)了并把路徑保存在CString pathname 中。第二個功能 想接著把對應(yīng)路徑的這個圖片顯示到對話框中。(這個按鈕是程序 ...… 查看全部問答∨ |
|
在platform。bib下,添加某個文件,系統(tǒng)啟動后默認(rèn)會在windows下找到。 如果我想將一個文件夾放在桌面,文件夾里有幾個文件,系統(tǒng)啟動后,自動運行的程序可以對這個文件夾里的文件進(jìn)行操作。 在制作nk的時候應(yīng)該怎么做?… 查看全部問答∨ |
|
尋有無線條碼數(shù)據(jù)終端Symbol PDT8146編程經(jīng)驗的高手 想做一個固定資產(chǎn)清查軟件: 通過無線終端可以實現(xiàn)對粘有條碼的設(shè)備進(jìn)行清查,并能夠與服務(wù)器數(shù)據(jù)進(jìn)行互連 PC端的程序不需要實現(xiàn),只要實現(xiàn)無線終端查詢和報表功能.請有興趣的朋友與我聯(lián)系,有償服務(wù) QQ 30107562 暗號 無線終端… 查看全部問答∨ |
|
在使用ADS Debug uC/OS系統(tǒng)和一個簡單的讓蜂鳴器響的應(yīng)用程序時,AXD loading image后,沒有進(jìn)入StartUP函數(shù)而是進(jìn)入Disassembly,Go后不停的running image ,蜂鳴器不響,也不知道是不是下到板子里了。 請問是怎么回事?… 查看全部問答∨ |
本來這次我想搞點硬件,但我那光盤單位和家里串來串去地,在家找不到,在單位放到光驅(qū)里,明天再說吧。 我想要想編好程序,必須得攝及一個東東------庫,提起這個庫我以前搞過STM32哈,那個庫我是百分之百反對地,但我越反它越大,還把CMS ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 正式發(fā)布本土化戰(zhàn)略,英飛凌猛攻中國市場
- 純視覺的自動駕駛會有哪些安全問題?
- 電池市場月報|2025年5月:穩(wěn)定增長,動力電池同比出口+30%
- 7納米以下汽車芯片測試的新挑戰(zhàn)!
- 英飛凌將CAPSENSE?集成到PSOC? HV MCU中 用于智能傳感器和執(zhí)行器
- 恩智浦與Rimac Technology聯(lián)合開發(fā)用于高級域和區(qū)域控制的集中式車輛架構(gòu)
- 佳能開發(fā)高動態(tài)范圍SPAD傳感器 有望應(yīng)用于自動駕駛和高級駕駛輔助系統(tǒng)
- 全固態(tài)電池生產(chǎn)線落地韓國
- 10 萬顆下線,車企很難拒絕4D成像雷達(dá)
- 自動駕駛毫米波雷達(dá)之間會相互干擾嗎?
- 【瓜分2500元紅包】票選2024 DigiKey “感知萬物,樂享生活”創(chuàng)意大賽人氣作品TOP3!
- 995美元Spartan6開發(fā)板,花落誰家?
- 【EE團(tuán)】開搶啦!!!TI超值工業(yè)級模擬器件套裝芯片再次登場?。?!
- 電路圖站2.0版上線,公開征集網(wǎng)友建議,填寫調(diào)查問卷贏積分!
- 圍讀 《嵌入式軟件的時間分析》——汽車行業(yè)領(lǐng)域的嵌入式軟件理論、分析及實踐
- 【開工大吉,搶樓有禮】聊一聊你感興趣的技術(shù)和板子
- 【EEWORLD第八屆社區(qū)明星人物】10月明星人物
- 【備戰(zhàn)國賽】超多電賽干貨資料等你下載!蓋樓助力電賽贏積分