導航:首頁 > 源碼編譯 > linux源碼ddr驅動

linux源碼ddr驅動

發布時間:2022-07-11 13:10:01

『壹』 linux 內核ddr3驅動在哪個文件

Flash全名叫做Flash Memory,屬於非易失性存儲設備(Non-volatile Memory Device),與此相對應的是易失性存儲設備(Volatile Memory Device)。關於什麼是非易失性/易失性,從名字中就可以看出,非易失性就是不容易丟失,數據存儲在這類設備中,即...

『貳』 請問各位大神,做linux驅動移植時,內核沒有的一些外設的驅動源碼一般是去哪裡找呢

linux內核源碼,能支持的驅動已經是很豐富的了。
如果沒有具體型號的外設驅動,那麼,就參考linux內核已有的驅動源碼,來修改。
比如:網卡驅動
A板卡,網路晶元是DM9000,在linux-x.x.x/drivers/net目錄下有dm9000.c驅動;
現在要做網路晶元是CS8900,沒有驅動,就可以參考DM9000驅動,
對照晶元手冊,修改驅動,編譯通過,調試等。

『叄』 arm linux dts怎麼配置ddr3

FDT是ARM Linux最新的設備驅動程序信息表,使用FDT的內核,就不用像過去的內核那樣,一個板子加一個mach的C文件,所有的設備信息可以記錄在一個樹狀信息文件裡面。 目前這方面資料比較少,我以AM335x處理器為例概括一下FDT的使用: FDT僅僅是一個信息的目錄和參數表,要使用某個功能內核中還必須有相應的驅動程序代碼 FDT的源文件位置在:arch/arm/boot/dts,例如,TI的Beagle bone black,源文件是arch/arm/boot/dts/am335x_boneblack.dts FDT在make ARCH=arm的時候就會自動生成,也可用make ARCH=arm dtbs來生成,例如TI的Beagle bone black生成的文件是arch/arm/boot/dts/am335x_boneblack.dtb,這是一個二進制文件 要想新增你自定義的FDT,請修改arch/arm/boot/dts/Makefile,並在相應的Kconfig中增加config選項,例如

『肆』 如何從linux內核上預留DDR物理內

luther@gliethttp:~$ vim /proc/iomem
00100000-5bf0ffff : System RAM
00100000-00575553 : Kernel code
00575554-0078d307 : Kernel data
0081a000-008a809f : Kernel bss
可以看到kernel code和data,bss使用的ram就是我們的系統內存,
luther@gliethttp:~$ dmesg也可以看到物理內存的情況
BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
[ 0.000000] BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000d2000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 000000005bf10000 (usable)
[ 0.000000] BIOS-e820: 000000005bf10000 - 000000005bf19000 (ACPI data)
[ 0.000000] BIOS-e820: 000000005bf19000 - 000000005bf80000 (ACPI NVS)
[ 0.000000] BIOS-e820: 000000005bf80000 - 0000000060000000 (reserved)
[ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
[ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)
luther@gliethttp:~$ vim /proc/meminfo
MemTotal: 1478540 kB
MemFree: 868544 kB
Buffers: 31084 kB
Cached: 321672 kB
SwapCached: 0 kB

luther@gliethttp:~$ sudo vim /boot/grub/grub.cfg
原來的
linux /boot/vmlinuz-2.6.31-14-generic root=UUID=9a04b75d-22f4-4100-a8b0-a07ef00ead04 ro quiet splash
新改的
linux /boot/vmlinuz-2.6.31-14-generic root=UUID=9a04b75d-22f4-4100-a8b0-a07ef00ead04 ro quiet splash mem=1442M

修改之後dmesg將多出如下一行提示:
[ 0.000000] user-defined physical RAM map:
[ 0.000000] user: 0000000000000000 - 000000000009dc00 (usable)
[ 0.000000] user: 000000000009dc00 - 00000000000a0000 (reserved)
[ 0.000000] user: 00000000000d2000 - 0000000000100000 (reserved)
[ 0.000000] user: 0000000000100000 - 000000005a200000 (usable)
[ 0.000000] user: 000000005bf10000 - 000000005bf19000 (ACPI data)
[ 0.000000] user: 000000005bf19000 - 000000005bf80000 (ACPI NVS)
[ 0.000000] user: 000000005bf80000 - 0000000060000000 (reserved)
[ 0.000000] user: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] user: 00000000fec00000 - 00000000fec10000 (reserved)
[ 0.000000] user: 00000000fee00000 - 00000000fee01000 (reserved)
[ 0.000000] user: 00000000fff80000 - 0000000100000000 (reserved)

之前
[ 0.000000] 583MB HIGHMEM available.
之後
[ 0.000000] 554MB HIGHMEM available.

這樣000000005a200000 - 000000005bf10000之間的29M物理內存就被預留出來供我們的DMA使用了[luther.gliethttp]

==================================================
=====第1步=============================================================================
[root@localhost ~]# cat /proc/meminfo
MemTotal: 1026124 kB

[root@localhost ~]# cat /proc/iomem
00000000-0009efff : System RAM
00000000-00000000 : Crash kernel
0009f000-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000d4000-000d4fff : Adapter ROM
000f0000-000fffff : System ROM
00100000-3f6effff : System RAM // 內存首尾地址,我們將從0x3f6effff結尾開始往前保留300M空間
00400000-006081dd : Kernel code
006081de-006e19bb : Kernel data
3f6f0000-3f6f2fff : ACPI Non-volatile Storage
3f6f3000-3f6fffff : ACPI Tables
40000000-400003ff : 0000:00:1f.1
f0000000-f7ffffff : 0000:00:02.0
f8000000-f8ffffff : PCI Bus #01
f8000000-f87fffff : 0000:01:04.0
f8000000-f87fffff : ceopen_dmp
f8800000-f880ffff : 0000:01:04.0
f8800000-f880ffff : ceopen_dmp
f8810000-f88100ff : 0000:01:03.0
f8810000-f88100ff : 8139too
f8811000-f88111ff : 0000:01:04.0
f8811000-f88111ff : ceopen_dmp
f9000000-f93fffff : 0000:00:00.0
f9400000-f947ffff : 0000:00:02.0
f9480000-f94803ff : 0000:00:1d.7
f9480000-f94803ff : ehci_hcd
f9481000-f94811ff : 0000:00:1f.5
f9481000-f94811ff : Intel ICH5
f9482000-f94820ff : 0000:00:1f.5
f9482000-f94820ff : Intel ICH5
fec00000-ffffffff : reserved
=====第2步=============================================================================
向cmdline加入mem和reserved啟動參數

hex(0x3f6f0000-300*1024*1024)等於0x2caf0000,這里表示從0x3f6effff結尾開始往前保留300M空間
hex(300*1024*1024)等於0x12c00000

[root@localhost ~]# vim /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet mem=0x2caf0000 reserve=0x2caf0000,0x12c00000
即保留0x2caf0000開始的300*1024*1024位元組內存

kernel/resource.c|820| __setup("reserve=", reserve_setup);
2.6.30.4內核cmdline常用命令行參數與相應處理函數

[root@localhost ~]# cat /proc/meminfo
MemTotal: 721324 kB

[root@localhost ~]# cat /proc/iomem
00000000-0009efff : System RAM
00000000-00000000 : Crash kernel
0009f000-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000d4000-000d4fff : Adapter ROM
000f0000-000fffff : System ROM
00100000-2caeffff : System RAM
00400000-006081dd : Kernel code
006081de-006e19bb : Kernel data
2caf0000-3f6effff : reserved // 這就是我們保留出來的內存了,和上面的內存結構一致[luther.gliethttp]
3f6f0000-3f6f03ff : 0000:00:1f.1
f0000000-f7ffffff : 0000:00:02.0
f8000000-f8ffffff : PCI Bus #01
f8000000-f87fffff : 0000:01:04.0
f8800000-f880ffff : 0000:01:04.0
f8810000-f88100ff : 0000:01:03.0
f8810000-f88100ff : 8139too
f8811000-f88111ff : 0000:01:04.0
f9000000-f93fffff : 0000:00:00.0
f9400000-f947ffff : 0000:00:02.0
f9480000-f94803ff : 0000:00:1d.7
f9480000-f94803ff : ehci_hcd
f9481000-f94811ff : 0000:00:1f.5
f9481000-f94811ff : Intel ICH5
f9482000-f94820ff : 0000:00:1f.5
f9482000-f94820ff : Intel ICH5

=====第3步=============================================================================
雖然預留了300M空間,但是ioremap_nocache不能映射全部的300M空間,不知道為什麼,可能和
系統自身有關系,下面是具體的映射代碼,因為已經將region做了reserved申請命名,所以
我們也就不需要再使用request_mem_region(pdma, dma_size, "gliethttp_dma_area")來獲得region了.

const dma_addr_t pdma = 0x2caf0000;
const size_t dma_size = (280*1024*1024);

kdma = ioremap_nocache(pdma, dma_size);
if (kdma == NULL)
return -ENOMEM;
其 實2G內存也沒有問題,mem=1.6G,然後ko驅動使用mmap將1.6G-2G之間的內存物理地址直接映射給user空間,這樣user空間就可以 直接向1.6G-2G物理內存寫入數據了,然後PCI直接通過寄存器配置,向1.6G-2G的物理地址讀取數據,這樣透過ko驅動將user和pci建立 了直連,當然了,因為內核線性地址為3G-4G只有1G的內存可以被映射,所以2G內存的另外1G內存就屬於高端內存了,所以內核ko驅動不能映射 1.6G-2G的內存到內核線性地址空間,但是可以通過kmap短暫的映射來使用[luther.gliethttp]

static void __init early_mem(char **p)
{
static int usermem __initdata = 0;
unsigned long size, start;

if (usermem == 0) {
usermem = 1;
meminfo.nr_banks = 0;
}

start = PHYS_OFFSET;
size = memparse(*p, p);
if (**p == '@')
start = memparse(*p + 1, p);

arm_add_memory(start, size);
}
__early_param("mem=", early_mem);

以下轉自:http://hi..com/linuxbestbest/blog/item/9bc8dbdb72127763d0164e9c.html

有時,內核不能識別你的全部內存(RAM)。你可以用 cat /proc/meminfo 命令來校驗。
查看一下所顯示的數量是否與你所知的系統內存相同。如果不同,在 /boot/grub/grub.conf 文件中添加以下一行:
mem=xxM
把 xx 替換成你擁有的內存數量(以 MB 為單位)。
在 /boot/grub/grub.conf 文件中,以上的例子與下面相似:,
#NOTICE: You have a /boot partition. This means that
# all kernel paths are relative to /boot/
default=0
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-2.47.1)
root (hd0,0)
kernel /vmlinuz-2.4.20-2.47.1 ro root=/dev/hda3 mem=128M
當你重新引導後,grub.conf 文件中的改變將會反映在你的系統中。
或者,你可以在 /etc/lilo.conf 文件中添加以下一行:
append="mem=xxM"
注意,append 命令在 GRUB 和 LILO 中都可用。
把 xx 替換成你擁有的內存數量(以 MB 為單位)。切記,每映像後補的行會完全覆寫全局後補的行。把這行添加到每映像描述中可能值得一試。
在 /etc/lilo.conf 文件中,以上的例子與下面相似:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50

image=/boot/vmlinuz-2.4.20-2.47.1
label=linux
root=/dev/sda1
initrd=/boot/initrd-2.4.20-2.47.1.img
read-only
append="mem=128M"
記住在改變了 /etc/lilo.conf 文件後運行 /sbin/lilo -v 命令。
請注意,在 GRUB 或 LILO 中指定所用標簽(映像)時傳遞這一選項可以獲得同樣的效果。
當你已載入 GRUB 引導屏幕後,鍵入 e 來編輯。你所選定的引導標簽的配置文件中的項目列表就會在你面前出現。
選擇開頭為 kernel 的行,然後鍵入 e 來編輯這一引導項目。
在 kernel 行的末尾,添加:
mem=xxM

append=xxM
這里的 xx 與你系統的內存數量相同。
按 [Enter] 鍵來退出編輯模式。
回到 GRUB 屏幕後,鍵入 b 來用你的新內存指數引導。
在圖形化的 LILO 屏幕上,按 [Ctrl]-[x] 退回到 boot: 提示。接下來,在 boot: 提示下輸入:
linux mem=xxM
請記住將 xx 替換成你系統的內存數量。按 [Enter] 鍵來引導。

http://blog.sina.com.cn/s/blog_677570ff0100l1ng.html
http://www.kerneltravel.net/jiaoliu/map.htm

『伍』 Linux驅動源碼怎麼和硬體聯系

如題,本人安裝了REDHAT LINUX,但不知道有哪些硬體的驅動程序沒有安裝,我如何才能查看這些沒有安裝驅動程序的硬體呢

『陸』 驅動開發必須使用開發板廠家提供的Linux源碼嗎

驅動開發環境
要進行linux驅動開發我們首先要有linux內核的源碼樹,並且這個linux內核的源碼樹要和開發板中的內核源碼樹要一直;
比如說我們開發板中用的是linux kernel內核版本為2.6.35.7,在我們ubuntu虛擬機上必須要有同樣版本的源碼樹,
我們再編譯好驅動的的時候,使用modinfo XXX命令會列印出一個版本號,這個版本號是與使用的源碼樹版本有關,如果開發板中源碼樹中版本與
modinfo的版本信息不一致使無法安裝驅動的;
我們開發板必須設置好nfs掛載;這些在根文件系統一章有詳細的介紹;

『柒』 移植linux到am335x的時候如何配置ddr3驅動

TI的LCD控制器驅動是非常完善的,共通的地方已經由驅動封裝好了,與按鍵一樣,我們可以通過DTS配置完成LCD的顯示。下面,我們來討論下使用DTS方式配置內核完成LCD驅動的思路。(1)初步分析由於TQ335x使用的晶元是AM335x,故仍然可以參考am335

『捌』 linux的啟動的哪個環節中進行了ddr的配置

.開機啟動時自動運行程序Linux載入後, 它將初始化硬體和設備驅動, 然後運行第一個進程init。init根據配置文件繼續引導過程,啟動其它進程。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的腳本文件,可以使init自動啟動其它程序。例如:編輯 /etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在開機啟動後直接進入X-Window。2.登錄時自動運行程序用戶登錄時,bash首先自動執行系統管理員建立的全局登錄script :/ect/profile。

『玖』 如何編譯一個linux下的驅動模塊

linux下編譯運行驅動
嵌入式linux下設備驅動的運行和linux x86 pc下運行設備驅動是類似的,由於手頭沒有嵌入式linux設備,先在vmware上的linux上學習驅動開發。
按照如下方法就可以成功編譯出hello world模塊驅動。
1、首先確定本機linux版本
怎麼查看Linux的內核kernel版本?
'uname'是Linux/unix系統中用來查看系統信息的命令,適用於所有Linux發行版。配合使用'uname'參數可以查看當前伺服器內核運行的各個狀態。
#uname -a
Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux

只列印內核版本,以及主要和次要版本:
#uname -r
3.5.0-19-generic

要列印系統的體系架構類型,即的機器是32位還是64位,使用:
#uname -p
i686

/proc/version 文件也包含系統內核信息:
# cat /proc/version
Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012

發現自己的機器linux版本是:3.5.0-19-generic
2、下載機器內核對應linux源碼
到下面網站可以下載各個版本linux源碼https://www.kernel.org/
如我的機器3.5.0版本源碼下載地址為:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.tar.bz2
下載完後,找一個路徑解壓,如我解壓到/linux-3.5/
然後很重要的一步是:執行命令uname -r,可以看到Ubuntu的版本信息是3.5.0-19-generic
。進入linux源碼目錄,編輯Makefile,將EXTRAVERSION = 修改為EXTRAVERSION= -19-generic。
這些都是要配置源碼的版本號與系統版本號,如果源碼版本號和系統版本號不一致,在載入模塊的時候會出現如下錯誤:insmod: error inserting 'hello.ko': -1 Invalid mole format。
原因很明確:編譯時用的hello.ko的kenerl 不是我的pc的kenerl版本。

執行命令cp /boot/config-3.5.0-19-generic ./config,覆蓋原有配置文件。
進入linux源碼目錄,執行make menuconfig配置內核,執行make編譯內核。

3、寫一個最簡單的linux驅動代碼hello.c

/*======================================================================
Asimple kernel mole: "hello world"
======================================================================*/
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("zeroboundaryBSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO"Hello World enter\n");
return0;
}

static void hello_exit(void)
{
printk(KERN_INFO"Hello World exit\n ");
}

mole_init(hello_init);
mole_exit(hello_exit);

MODULE_AUTHOR("zeroboundary");
MODULE_DESCRIPTION("A simple HelloWorld Mole");
MODULE_ALIAS("a simplestmole");

4、寫一個Makefile對源碼進行編譯
KERN_DIR = /linux-3.5
all:
make-C $(KERN_DIR) M=`pwd` moles
clean:
make-C $(KERN_DIR) M=`pwd` clean

obj-m += hello.o

5、模塊載入卸載測試
insmod hello.ko
rmmod hello.ko

然後dmesg|tail就可以看見結果了

最後,再次編譯驅動程序hello.c得到hello.ko。執行insmod ./hello.ko,即可正確insert模塊。

使用insmod hello.ko 將該Mole加入內核中。在這里需要注意的是要用 su 命令切換到root用戶,否則會顯示如下的錯誤:insmod: error inserting 'hello.ko': -1 Operation not permitted

內核模塊版本信息的命令為modinfo hello.ko
通過lsmod命令可以查看驅動是否成功載入到內核中
通過insmod命令載入剛編譯成功的time.ko模塊後,似乎系統沒有反應,也沒看到列印信息。而事實上,內核模塊的列印信息一般不會列印在終端上。驅動的列印都在內核日誌中,我們可以使用dmesg命令查看內核日誌信息。dmesg|tail

可能還會遇到這種問題insmod: error inserting 'hello.ko': -1 Invalid mole format
用dmesg|tail查看內核日誌詳細錯誤
disagrees about version of symbolmole_layout,詳細看這里。
http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmoles/index.html
在X86上我的辦法是:
make -C/usr/src/linux-headers-3.5.0-19-generic SUBDIRS=$PWD moles

閱讀全文

與linux源碼ddr驅動相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:578
python員工信息登記表 瀏覽:376
高中美術pdf 瀏覽:160
java實現排列 瀏覽:512
javavector的用法 瀏覽:981
osi實現加密的三層 瀏覽:231
大眾寶來原廠中控如何安裝app 瀏覽:913
linux內核根文件系統 瀏覽:242
3d的命令面板不見了 瀏覽:525
武漢理工大學伺服器ip地址 瀏覽:148
亞馬遜雲伺服器登錄 瀏覽:524
安卓手機如何進行文件處理 瀏覽:70
mysql執行系統命令 瀏覽:929
php支持curlhttps 瀏覽:142
新預演算法責任 瀏覽:443
伺服器如何處理5萬人同時在線 瀏覽:250
哈夫曼編碼數據壓縮 瀏覽:424
鎖定伺服器是什麼意思 瀏覽:383
場景檢測演算法 瀏覽:616
解壓手機軟體觸屏 瀏覽:348