新聞中心
Linux開(kāi)發(fā)資料一鍵下載,解決你的所有煩惱

10多年的梅縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整梅縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“梅縣網(wǎng)站設(shè)計(jì)”,“梅縣網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
隨著Linux操作系統(tǒng)的日益普及和應(yīng)用范圍的不斷擴(kuò)大,Linux操作系統(tǒng)的開(kāi)發(fā)也變得越來(lái)越重要。然而,Linux開(kāi)發(fā)資料的搜索、收集和整理卻讓許多開(kāi)發(fā)者感到煩惱。這些資料散落在各大網(wǎng)站、論壇、博客等地,費(fèi)時(shí)費(fèi)力地去查找和下載不僅拖慢了開(kāi)發(fā)進(jìn)度,還可能導(dǎo)致誤解和錯(cuò)誤。
為了解決這一難題,開(kāi)發(fā)者們將目光投向了Linux開(kāi)發(fā)資料一鍵下載這種便捷方式。Linux開(kāi)發(fā)資料一鍵下載是一個(gè)集成了各種Linux開(kāi)發(fā)資料的工具,只需要在下載軟件中輸入關(guān)鍵詞,即可快速掃描所有可能的來(lái)源,并為用戶(hù)提供一個(gè)下載頁(yè)面,用戶(hù)可以在那里找到所有相關(guān)資料、文檔和樣例代碼,從而大大加快了開(kāi)發(fā)和調(diào)試過(guò)程。
此外,Linux開(kāi)發(fā)資料一鍵下載還提供了以下優(yōu)勢(shì):
1.減少工作時(shí)間和成本
Linux開(kāi)發(fā)資料一鍵下載涵蓋了各種Linux開(kāi)發(fā)資料,包括操作系統(tǒng)、內(nèi)核、驅(qū)動(dòng)程序、協(xié)議棧、工具鏈、ARM開(kāi)發(fā)等。為開(kāi)發(fā)人員提供一個(gè)便捷的方式來(lái)查找和獲取這些資料,使他們能夠更快、更高效地完成他們的工作,減少時(shí)間和成本的浪費(fèi)。
2.提高開(kāi)發(fā)效率
Linux開(kāi)發(fā)資料一鍵下載建立了一個(gè)整合的平臺(tái),為開(kāi)發(fā)人員提供一個(gè)集中查找以及整理的資料中心。這意味著開(kāi)發(fā)人員可以節(jié)省時(shí)間和精力,以及避免在完全相同的主題上使用多個(gè)來(lái)源。
3.更好地建立和共享團(tuán)隊(duì)知識(shí)
Linux資料一鍵下載平臺(tái)是一個(gè)有用的工具,可以幫助團(tuán)隊(duì)成員合理地實(shí)現(xiàn)工作流程。當(dāng)一個(gè)團(tuán)隊(duì)的成員發(fā)現(xiàn)新的Linux開(kāi)發(fā)資料資源后,可以將其分享給其他成員。這有助于增強(qiáng)團(tuán)隊(duì)之間的合作精神,提高團(tuán)隊(duì)技術(shù)水平,也有利于控制培訓(xùn)成本。
4.提高技術(shù)實(shí)力
利用Linux開(kāi)發(fā)資料一鍵下載工具可以用最小的投入獲取更大的效益,同時(shí)也可以獲得Linux開(kāi)發(fā)的最新動(dòng)態(tài)。通過(guò)學(xué)習(xí)這些資料,開(kāi)發(fā)人員可以提高自己的技術(shù)實(shí)力,并且在工作中迅速升職獲得更大的獎(jiǎng)勵(lì)。
Linux開(kāi)發(fā)資料一鍵下載是開(kāi)發(fā)者們必備的強(qiáng)大工具,能夠有效解決搜索、收集和整理煩瑣資料的問(wèn)題,提高工作效率,同時(shí)幫助開(kāi)發(fā)人員增強(qiáng)團(tuán)隊(duì)精神,進(jìn)一步提高技術(shù)實(shí)力。因此,為了提高開(kāi)發(fā)效率和節(jié)約時(shí)間和成本,Linux開(kāi)發(fā)資料一鍵下載工具是值得推薦和使用的。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
求嵌入式linux開(kāi)發(fā)詳細(xì)流程(步驟)?
1
嵌入式LINUX開(kāi)發(fā)入門(mén)
V1.5
2
華恒對(duì)社區(qū)的貢獻(xiàn)華恒對(duì)社區(qū)的貢獻(xiàn)
本文適用于對(duì)嵌入式系統(tǒng)沒(méi)有概念和經(jīng)驗(yàn),
渴望進(jìn)入嵌入式系統(tǒng)開(kāi)發(fā)的領(lǐng)域,
但又覺(jué)得系統(tǒng)太復(fù)雜,要學(xué)的東西太多,
感覺(jué)完全無(wú)從學(xué)起,無(wú)從下手
的
初級(jí)開(kāi)發(fā)人員
3
簡(jiǎn)述簡(jiǎn)述
1,嵌入式系統(tǒng)必須以實(shí)踐入門(mén),所以要學(xué)習(xí)必須購(gòu)買(mǎi)嵌入式開(kāi)發(fā)系統(tǒng)
(開(kāi)發(fā)板或?qū)嶒?yàn)箱),否則永遠(yuǎn)只能停留在紙上談兵的階段.
2,學(xué)習(xí)嵌入式LINUX開(kāi)發(fā),必須注意學(xué)習(xí)的方式和方法!就把這個(gè)嵌
入式開(kāi)發(fā)板當(dāng)作一臺(tái)WINDOWS PC,就像用VC一樣在上面做開(kāi)發(fā)(只是
開(kāi)發(fā)模式由原來(lái)完全的本地開(kāi)發(fā)變成宿主機(jī)–目標(biāo)板的模式了).
絕對(duì)不要去盲目閱讀LINUX內(nèi)核分析之類(lèi)的書(shū)籍,對(duì)于初學(xué)者一兩年內(nèi)
根本用不到這個(gè)!就像在WINDOWS下開(kāi)發(fā)永遠(yuǎn)不要關(guān)心WINDOWS內(nèi)核一
個(gè)道理,不要因?yàn)長(zhǎng)INUX內(nèi)核是源代碼開(kāi)放的,就非要去研究LINUX內(nèi)
核.90%的開(kāi)發(fā)人員關(guān)心的還是”外設(shè)接口驅(qū)動(dòng)+應(yīng)用程序(如GUI)”
,所以對(duì)于初學(xué)者,進(jìn)入嵌入式LINUX開(kāi)發(fā)的殿堂,必須邁過(guò)如下兩個(gè)
臺(tái)階:
嵌入式基本C程序開(kāi)發(fā)及調(diào)試方法
基本驅(qū)動(dòng)的概念和開(kāi)發(fā)調(diào)試方法
4
嵌入式開(kāi)發(fā)上手學(xué)習(xí)大綱嵌入式開(kāi)發(fā)上手學(xué)習(xí)大綱
安裝配置一臺(tái)REDHAT 9的LINUX PC機(jī).宿主機(jī)配置(TFTP/NFS)
參見(jiàn):
通過(guò)終端軟件minicom熟悉一下嵌入式系統(tǒng)的基本操作,否則你
根本就不會(huì)操作板子!
通過(guò)NFS mount的方式,學(xué)習(xí)用C語(yǔ)言開(kāi)發(fā)最基本的嵌入式應(yīng)用程
序,并熟悉嵌入式的調(diào)試方法.(HHARM9-EDU實(shí)驗(yàn)1)
熟悉掌握嵌入式LINUX下的編譯方法和技巧,并進(jìn)一步掌握調(diào)試
復(fù)雜嵌入式應(yīng)用程序的方法和技巧.(HHARM9-EDU實(shí)驗(yàn)2,3)
通過(guò)NFS mount的方式,學(xué)習(xí)如何使用一個(gè)基本的嵌入式LINUX下
的設(shè)備驅(qū)動(dòng)(inod驅(qū)動(dòng)+測(cè)試用應(yīng)用程序),并嘗試著改改看
如何發(fā)生變化和如何調(diào)試.(HHARM9-EDU實(shí)驗(yàn)6中斷,
14GPIO/key,AD/DA,I2C等)
進(jìn)一步深入學(xué)習(xí)其它的接口技術(shù).(HHARM9-EDU其它剩余實(shí)驗(yàn))
【注意】
做到這里您一次都不需要燒寫(xiě)FLASH!
5
Tips–再談學(xué)習(xí)的方式方法Tips–再談學(xué)習(xí)的方式方法
早早安裝一臺(tái)REDHAT 9 LINUX的PC,下面這些必須熟悉了解(因?yàn)樗鼘⑹俏?
們?nèi)蘸箝_(kāi)發(fā)更佳的測(cè)試伙伴):
telnet/ncftp/tar(xzf/czf)/vi/grep/find/NFS/tftp等常用操作;熟悉了解
LINUX系統(tǒng)的文件目錄構(gòu)成(/bin/in/etc/home/dev/usr等的意義,系統(tǒng)搜
索路徑PATH因?yàn)榍度胧絃INUX上和這個(gè)完全一樣)(關(guān)于這些LINUX常用知識(shí)
請(qǐng)參見(jiàn)HHARM2410產(chǎn)品技術(shù)手冊(cè)附錄B,那里沒(méi)有無(wú)用的抄襲,而是一線研發(fā)
人員實(shí)際的總結(jié))
大致了解LINUX內(nèi)核源代碼的文件目錄的構(gòu)成(主要就是drivers目錄,它是我
們最常打交道的驅(qū)動(dòng)的目錄).因?yàn)槲覀儗?duì)于LINUX下驅(qū)動(dòng)的開(kāi)發(fā)最重要的工
作學(xué)習(xí)的方法就是:”搜索+模仿”.大家都知道LINUX是開(kāi)放源代碼的,但
其實(shí)很多人并沒(méi)有意識(shí)到這個(gè)對(duì)于我們實(shí)際的開(kāi)發(fā)有什么意義.就像面前擺
了一座寶庫(kù),但卻不知如何去尋寶.我們尋寶的手段就是搜索.對(duì)于驅(qū)動(dòng),
LINUX開(kāi)放的代碼(drivers目錄+google網(wǎng)絡(luò))里面提供了無(wú)數(shù)常見(jiàn)接口芯片
的驅(qū)動(dòng)代碼或模板(如串口serial.c,framebuffer驅(qū)動(dòng)等),我們首先要知道
這些文件在哪個(gè)目錄下,找到后就是大致讀一下,找出與自己實(shí)際硬件的差
異,以此為基礎(chǔ)修修改改即可.而修改時(shí)一個(gè)重要的手段就是模仿現(xiàn)有的代
碼!
6
Tips–再談學(xué)習(xí)的方式方法Tips–再談學(xué)習(xí)的方式方法
在嵌入式板卡上做任何稍微復(fù)雜些的工作,心里沒(méi)底的話(huà),就一定養(yǎng)成先在
REDHAT LINUX PC上測(cè)試的好習(xí)慣.無(wú)論你做GPRS/CDMA/PPP/ADSL撥號(hào)還是做
USB無(wú)線網(wǎng)卡驅(qū)動(dòng),還是做SAMBA/VPN/SNMP等協(xié)議軟件,都先在REDHAT LINUX
上配置好,測(cè)試通過(guò)有了感覺(jué)之后再到嵌入式上試,因?yàn)锳RMLINUX跟REDHAT
LINUX對(duì)于我們開(kāi)發(fā)人員而言幾乎沒(méi)有任何區(qū)別!切忌冒進(jìn)!
不要試圖去通讀CPU的manual,沒(méi)有用的,就像不要為了做嵌入式LINUX就要
通讀LINUX內(nèi)核源代碼分析一個(gè)道流.以目前實(shí)際的工作為主線,涉及到什么
再去大致了解一下相關(guān)內(nèi)容,例如我們第二步要做MODULES形式的驅(qū)動(dòng),那么
這時(shí)去大致翻翻那本《LINUX驅(qū)動(dòng)開(kāi)發(fā)》一書(shū)的幾頁(yè)還是會(huì)有些幫助的,但也
沒(méi)有必要全部通讀!
7
嵌入式開(kāi)發(fā)模式嵌入式開(kāi)發(fā)模式
【宿主機(jī)】
網(wǎng)線
網(wǎng)線
交換機(jī)
串口線
HHARM開(kāi)發(fā)板
假設(shè)IP為:192.168.2.120
【目標(biāo)板】
運(yùn)行RedhatLinux的PC機(jī)
假設(shè)IP為:192.168.2.2.122
交叉編譯
8
之一部分
嵌入式基本C程序開(kāi)發(fā)和調(diào)試
9
嵌入式基本C程序開(kāi)發(fā)和調(diào)試嵌入式基本C程序開(kāi)發(fā)和調(diào)試
10
關(guān)于Makefile關(guān)于Makefile
Makefile就是一個(gè)批處理的腳本!通過(guò)執(zhí)行make來(lái)調(diào)用
EXEC = hello
OB = hello1.o #hello2.o hello3.o
LIBS += #-lcrypt -lm
all: $(EXEC)
$(EXEC) : $(OB)
$(CC) $(CFLAGS) $(LDFLAGS) -o $(EXEC) $(OB) $(LIBS)
clean:
rm-f $(OB) $(EXEC)
#Note
#表示注釋,這是個(gè)通用的模板,我們的例子里面只用到一個(gè)hello1.c,而
且也不需要鏈接加密庫(kù)(libcrypt.a)和數(shù)學(xué)庫(kù)(libm.a).hello1.c的
內(nèi)容就不需要寫(xiě)了吧,就一個(gè)printf語(yǔ)句
11
NFS mount調(diào)試方法進(jìn)階NFS mount調(diào)試方法進(jìn)階
前面./hello的方式用來(lái)調(diào)試最簡(jiǎn)單的主動(dòng)執(zhí)行的應(yīng)用程序.還有很多的
應(yīng)用程序要復(fù)雜一些,例如minigui/qt/microwin等GUI系統(tǒng),它除了
可執(zhí)行文件外,還涉及自己的動(dòng)態(tài)庫(kù)libxxx.so;還有另外一些如CGI類(lèi)
的被動(dòng)的被其它程序激發(fā)執(zhí)行的程序?qū)τ谶@樣的復(fù)雜程序調(diào)試,可如下
操作: (細(xì)節(jié)處有一些操作目錄的變化)
在REDHAT LINUX PC上執(zhí)行:
mkdir /2410lib;
gunzip ramdisk.image.gz
mount -o loop ramdisk.image /tmp
cp -f /tmp/lib/* /2410lib
在minicom等終端里執(zhí)行:
mount -o nolock
192.168.2.122:/2410lib /lib
mount -o nolock 192.168.2.122:/ /mnt
/mnt/treeview&
#這樣就可以NFS調(diào)試帶動(dòng)態(tài)庫(kù)的復(fù)雜程序了
注意:
從上可見(jiàn),板子可以多次mount多個(gè)目錄,或者多個(gè)不同IP的PC的不同硬盤(pán)目錄,甚至可以將
板子上所有的目錄都用PC硬盤(pán)上的同類(lèi)目錄覆蓋掉
同時(shí)可以看出這時(shí)的目標(biāo)板就像一臺(tái)UNIX主機(jī)一樣可以為多個(gè)開(kāi)發(fā)人員提供并行開(kāi)發(fā)的環(huán)境.
12
第二部分
基本驅(qū)動(dòng)的概念和開(kāi)發(fā)調(diào)試方法
13
基本驅(qū)動(dòng)的概念和開(kāi)發(fā)調(diào)試方法基本驅(qū)動(dòng)的概念和開(kāi)發(fā)調(diào)試方法
ARMLINUX不同于uClinux,因?yàn)閱?dòng)了MMU,所以應(yīng)用程序不能直接
讀寫(xiě)物理地址(包括CPU寄存器,
MEMORY,外設(shè)芯片內(nèi)部寄存器等),而必須借助與驅(qū)動(dòng)的形式,切入
內(nèi)核用ioremap來(lái)實(shí)現(xiàn)對(duì)這些物理地址的訪問(wèn).
下面以一個(gè)最常見(jiàn)的GPIO操作為例來(lái)說(shuō)明:
就是選擇S3C2410的GPIO_C6口作為一個(gè)輸出口線,用戶(hù)通過(guò)一個(gè)應(yīng)用程序調(diào)用驅(qū)
動(dòng)程序來(lái)控制這個(gè)口線輸出1或者0,即高低電平.
例子由兩部分構(gòu)成:”驅(qū)動(dòng)(gpio_driv.c)+應(yīng)用程序(gpio_test.c)”
LINUX下的驅(qū)動(dòng)有兩種形式:
MODULES形式的可動(dòng)態(tài)加載的驅(qū)動(dòng)(這是LINUX內(nèi)核一個(gè)非常重要
的特點(diǎn)),我們測(cè)試用建議都用這種形式的,因?yàn)樗{(diào)試就和普通應(yīng)用
程序一樣,可以通過(guò)NFS mount的方式來(lái)調(diào)試,非常方便.
靜態(tài)編譯到內(nèi)核里面的驅(qū)動(dòng)
14
基本驅(qū)動(dòng)的概念和開(kāi)發(fā)調(diào)試方法基本驅(qū)動(dòng)的概念和開(kāi)發(fā)調(diào)試方法
樣例modules形式驅(qū)動(dòng)的測(cè)試用法如下:
NFS mount宿主機(jī)后,
inod gpio_driv.o #在板上嵌入式LINUX內(nèi)核已經(jīng)跑起來(lái)之后動(dòng)態(tài)加載驅(qū)動(dòng)module
mknod/dev/gpiotest c
./gpio_test#執(zhí)行測(cè)試用的應(yīng)用程序來(lái)調(diào)用驅(qū)動(dòng),來(lái)驅(qū)動(dòng)IO輸出高低電平
0:set ,1:clear,2: quit :
用戶(hù)輸入0,則C6口輸出3.3V高電平;用戶(hù)輸入1,則C6口輸出0低電平.
應(yīng)用程序如何調(diào)用驅(qū)動(dòng)以及驅(qū)動(dòng)要注意的一些細(xì)節(jié)在下面的詳細(xì)代碼中通過(guò)注釋
的形式一一說(shuō)明.
15
驅(qū)動(dòng)MODULE源代碼驅(qū)動(dòng)MODULE源代碼
#include //FILE: gpio_driv.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define IOPORT_MAJOR 220 //定義主設(shè)備號(hào),和前面的mknod/dev/gpiotestc 220 0匹配
typedefchar ioport_device_t; long port_addr;
static ioport_device_t gpio_devices;
int gpio_open(struct inode*, structfile *);
int gpio_release(struct inode*, structfile *);
int gpio_ctl_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
16
驅(qū)動(dòng)MODULE源代碼驅(qū)動(dòng)MODULE源代碼
static structfile_operations gpio_ctl_fops= {
ioctl: gpio_ctl_ioctl,
open: gpio_open,
release: gpio_release,
};
//所有的操作系統(tǒng)將硬件設(shè)備當(dāng)作文件處理,所有外設(shè)的操作就封裝在這個(gè)file_operations 結(jié)構(gòu)體里面
//就是文件的open/read/write/close等操作,剩余的都放到一個(gè)ioctl函數(shù)里面做處理.
int__init gpio_init(void)
{
inti;
//可以看到下面這句向操作系統(tǒng)注冊(cè)的函數(shù)里面和前面我們?cè)趍inicom里面手工創(chuàng)建的設(shè)備文件是
//要完全匹配的:mknod/dev/gpiotestc 220 0,這表明創(chuàng)建的是一個(gè)字符設(shè)備(chrdev),
//主設(shè)備號(hào)220,次設(shè)備號(hào)0,因?yàn)椴僮飨到y(tǒng)不理會(huì)”gpiotest”這個(gè)設(shè)備名字符串的,它只認(rèn)數(shù)字的主次
//設(shè)備號(hào),而應(yīng)用程序到時(shí)是open(“/dev/gpiotest”,xx)的,中間就是通過(guò)這兩個(gè)數(shù)字聯(lián)系起來(lái)的.
register_chrdev(IOPORT_MAJOR, “gpiotest”, &gpio_ctl_fops);
return 0;
}
module_init(gpio_init); //用戶(hù)加載該驅(qū)動(dòng)時(shí)執(zhí)行inod gpio_driv.o就會(huì)自動(dòng)調(diào)用gpio_init函數(shù),它是驅(qū)動(dòng)
//的入口點(diǎn),相當(dāng)于應(yīng)用程序的main函數(shù).
module_exit(gpio_release); //用戶(hù)卸載該驅(qū)動(dòng)rmmod gpio_driv時(shí)執(zhí)行
17
驅(qū)動(dòng)MODULE源代碼驅(qū)動(dòng)MODULE源代碼
int gpio_open(struct inode*inode, structfile *filp)
{
intminor;
minor = MINOR(inode->i_rdev);
#if 0 //這里是通常的做法,因?yàn)镾3C2410的LINUX內(nèi)核提供了set_gpio_ctrl專(zhuān)用函數(shù),所以不要下面
這樣做了
(void *)(port_addr) = ioremap(0x,0x8);
*(volatile unsigned int*)(port_addr)|=0x;
#endif
//驅(qū)動(dòng)里面在open這個(gè)設(shè)備的時(shí)候設(shè)置這個(gè)口為輸出(因?yàn)镚PIO必須設(shè)置方向,做輸入還是輸出)
set_gpio_ctrl(GPIO_MODE_OUT | GPIO_C6);
gpio_devices++;
return 0;
}
18
驅(qū)動(dòng)MODULE源代碼驅(qū)動(dòng)MODULE源代碼
int gpio_release(struct inode*inode, structfile *filp)
{ intminor;
minor = MINOR(inode->i_rdev);
if (gpio_devices)
gpio_devices–;
return 0;
}
int gpio_ctl_ioctl(struct inode*inode,structfile *flip,unsigned intcommand,unsigned long arg)
{
interr = 0;
intminor = MINOR(inode->i_rdev);
switch (command) {
case IOWRITE:
write_gpio_bit(GPIO_MODE_OUT | GPIO_C6,1); //輸出3.3V電平
return 0;
case IOCLEAR:
write_gpio_bit(GPIO_MODE_OUT | GPIO_C6,0); //輸出0電平
return 0;
}
return err;
}
19
基本驅(qū)動(dòng)MODULE的Makefile基本驅(qū)動(dòng)MODULE的Makefile
注意!驅(qū)動(dòng)程序的Makefile和應(yīng)用程序的參數(shù)不同!
CC = /opt/host/armv4l/bin/armv4l-unknown-linux-gcc
LD = /opt/host/armv4l/bin/armv4l-unknown-linux-ld
CFLAGS = -D__KERNEL__ -I/HHARM2410-R3/kernel/include/linux
-I/HHARM2410-R3/kernel/include -Wall -Wstrict-prototypes -Wno-trigraphs-
Os -mapcs-fno-strict-aliasing-fno-common -fno-common -pipe -mapcs-32
-march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-float
-DKBUILD_BASENAME= gpio_driv
-I/opt/host/armv4l/src/linux/include -DMODULE
gpio_driv.o: gpio_driv.c
$(CC) $(CFLAGS) -c $^ -o $@
cp gpio_driv.o / -f
clean:
-rm-f *.o
20
測(cè)試驅(qū)動(dòng)的應(yīng)用程序測(cè)試驅(qū)動(dòng)的應(yīng)用程序
#include //FILE: gpio_test.c
#include
#include …//省略一些頭文件
#include
#define DEVICE_GPIOTEST “/dev/gpiotest”
intmain()
{
int fd; int val=-1;
if((fd=open(DEVICE_ GPIOTEST,O_RDON | O_NONBLOCK))i_rdev);
#if 0 //這里是通常的做法,因?yàn)镾3C2410的LINUX內(nèi)核提供了set_gpio_ctrl專(zhuān)用函數(shù),所以不要下面
這樣做了
(void *)(port_addr) = ioremap(0x,0x8);
*(volatile unsigned int*)(port_addr)|=0x;
#endif
//驅(qū)動(dòng)里面在open這個(gè)設(shè)備的時(shí)候設(shè)置這個(gè)口為輸出(因?yàn)镚PIO必須設(shè)置方向,做輸入還是輸出)
set_gpio_ctrl(GPIO_MODE_OUT | GPIO_C6);
gpio_devices++;
return 0;
}
驅(qū)動(dòng)MODULE源代碼驅(qū)動(dòng)MODULE源代碼
int gpio_release(struct inode*inode, structfile *filp)
{ intminor;
minor = MINOR(inode->i_rdev);
if (gpio_devices)
gpio_devices–;
return 0;
}
int gpio_ctl_ioctl(struct inode*inode,structfile *flip,unsigned intcommand,unsigned long arg)
{
interr = 0;
intminor = MINOR(inode->i_rdev);
switch (command) {
case IOWRITE:
write_gpio_bit(GPIO_MODE_OUT | GPIO_C6,1); //輸出3.3V電平
return 0;
case IOCLEAR:
write_gpio_bit(GPIO_MODE_OUT | GPIO_C6,0); //輸出0電平
return 0;
}
return err;
}
基本驅(qū)動(dòng)MODULE的Makefile基本驅(qū)動(dòng)MODULE的Makefile
注意!驅(qū)動(dòng)程序的Makefile和應(yīng)用程序的參數(shù)不同!
CC = /opt/host/armv4l/bin/armv4l-unknown-linux-gcc
LD = /opt/host/armv4l/bin/armv4l-unknown-linux-ld
CFLAGS = -D__KERNEL__ -I/HHARM2410-R3/kernel/include/linux
-I/HHARM2410-R3/kernel/include -Wall -Wstrict-prototypes -Wno-trigraphs-
Os -mapcs-fno-strict-aliasing-fno-common -fno-common -pipe -mapcs-32
-march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-float
-DKBUILD_BASENAME= gpio_driv
-I/opt/host/armv4l/src/linux/include -DMODULE
gpio_driv.o: gpio_driv.c
$(CC) $(CFLAGS) -c $^ -o $@
cp gpio_driv.o / -f
clean:
-rm-f *.o
測(cè)試驅(qū)動(dòng)的應(yīng)用程序測(cè)試驅(qū)動(dòng)的應(yīng)用程序
#include //FILE: gpio_test.c
#include
#include …//省略一些頭文件
#include
#define DEVICE_GPIOTEST “/dev/gpiotest”
intmain()
{
int fd; int val=-1;
if((fd=open(DEVICE_ GPIOTEST,O_RDON | O_NONBLOCK))
{ perror(“can not open device”); exit(1); }
while(1){
printf(“0:set ,1:clear,2: quit :”);
scanf(“%d”,&val);
if(val==0)
ioctl(fd,IOWRITE,0);//應(yīng)用程序就是這樣調(diào)用驅(qū)動(dòng)的
else if(val==1)
ioctl(fd,IOCLEAR,0);//應(yīng)用程序就是這樣調(diào)用驅(qū)動(dòng)的
else if(val==2){
close(fd); …
}
}
最后可試試燒寫(xiě)FLASH了最后可試試燒寫(xiě)FLASH了
完成自己的小驅(qū)動(dòng)和測(cè)試用應(yīng)用程序后,您可以將自己的初步成就燒寫(xiě)到板子里去了,具體的燒
寫(xiě)可參見(jiàn)我們產(chǎn)品手冊(cè)或者HHARM FAQ
如何加入到板子的文件系統(tǒng)里
文件系統(tǒng)就是用來(lái)存放用戶(hù)應(yīng)用程序的.
HHARM9系列嵌入式LINUX開(kāi)發(fā)系統(tǒng)的根文件系統(tǒng)采用的是ramdisk.
下面舉例說(shuō)明用戶(hù)如何把自己的hello程序燒寫(xiě)到板子上去:
先把ramdisk.image.gz解壓后mount -o loop 到一個(gè)目錄上,這樣就可以看到ramdisk里面的文
件及目錄內(nèi)容,這時(shí)再把你編譯號(hào)的hello這個(gè)可執(zhí)行文件復(fù)制到這個(gè)目錄的bin目錄下面,再
umount這個(gè)目錄,再gzip壓縮,這樣你所作的改動(dòng)就被帶到這個(gè)新生成的ramdisk.image.gz文件
里面了,然后你燒寫(xiě)這個(gè)文件就可以在板子上看到你的hello了.
簡(jiǎn)單命令序列:注意要自己調(diào)整目錄路徑,所有操作均在REDHAT LINUX PC機(jī)上完成:
gunzip ramdisk.image.gz
mkdir tmnt
mount -o loop ramdisk.image tmnt
cp -f busybox tmnt/bin
umount tmnt
gzip ramdisk.image
cp -f ramdisk.image.gz /tftpboot ;再后面的燒寫(xiě)步驟這里就不再贅述,參見(jiàn)HHARM FAQ或者我們手冊(cè)即可
參考資料參考資料
HHARM9-EDU實(shí)驗(yàn)指導(dǎo)書(shū)
參見(jiàn):華恒ARM9+LINUX+WINCE雙系統(tǒng)嵌入式教學(xué)實(shí)驗(yàn)箱
HHARM FAQ
華恒HHARM2410系列產(chǎn)品手冊(cè)
可EMAIL至華恒ARM產(chǎn)品系列技術(shù)支持信箱:
華恒嵌入式LINUX技術(shù)論壇
嵌入式LINUX開(kāi)發(fā)資源
Tips–再談學(xué)習(xí)的方式方法Tips–再談學(xué)習(xí)的方式方法
在嵌入式板卡上做任何稍微復(fù)雜些的工作,心里沒(méi)底的話(huà),就一定養(yǎng)成先在
REDHAT LINUX PC上測(cè)試的好習(xí)慣.無(wú)論你做GPRS/CDMA/PPP/ADSL撥號(hào)還是做
USB無(wú)線網(wǎng)卡驅(qū)動(dòng),還是做SAMBA/VPN/SNMP等協(xié)議軟件,都先在REDHAT LINUX
上配置好,測(cè)試通過(guò)有了感覺(jué)之后再到嵌入式上試,因?yàn)锳RMLINUX跟REDHAT
LINUX對(duì)于我們開(kāi)發(fā)人員而言幾乎沒(méi)有任何區(qū)別!切忌冒進(jìn)!
不要試圖去通讀CPU的manual,沒(méi)有用的,就像不要為了做嵌入式LINUX就要
通讀LINUX內(nèi)核源代碼分析一個(gè)道流.以目前實(shí)際的工作為主線,涉及到什么
再去大致了解一下相關(guān)內(nèi)容,例如我們第二步要做MODULES形式的驅(qū)動(dòng),那么
這時(shí)去大致翻翻那本《LINUX驅(qū)動(dòng)開(kāi)發(fā)》一書(shū)的幾頁(yè)還是會(huì)有些幫助的,但也
沒(méi)有必要全部通讀!好好看把
建立以Linux系統(tǒng)為基礎(chǔ)的開(kāi)發(fā)環(huán)境;
配置開(kāi)發(fā)主機(jī)(MINICOM調(diào)試嵌入式開(kāi)發(fā)板、NFS網(wǎng)絡(luò)文件系統(tǒng),防火墻);
建立引導(dǎo)裝載程序BOOTLOADER(公開(kāi)源代碼的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等);
下載別人已經(jīng)移植好的Linux操作系統(tǒng)(如μCLinux、ARM-Linux、PPC-Linux等);
建立根文件系統(tǒng)(包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等);
建立應(yīng)用程序的Flash磁盤(pán)分區(qū),一般使用JFFS2或YAFFS文件系統(tǒng);
開(kāi)發(fā)應(yīng)用程序,應(yīng)用程序可以放入根文件系統(tǒng)中,也可以放入YAFFS、JFFS2文件系統(tǒng)中;
linux開(kāi)發(fā) 資料的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux開(kāi)發(fā) 資料,「Linux開(kāi)發(fā)資料一鍵下載,解決你的所有煩惱」,求嵌入式linux開(kāi)發(fā)詳細(xì)流程(步驟)?的信息別忘了在本站進(jìn)行查找喔。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
網(wǎng)站標(biāo)題:「Linux開(kāi)發(fā)資料一鍵下載,解決你的所有煩惱」(linux開(kāi)發(fā)資料)
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/djhehsh.html


咨詢(xún)
建站咨詢(xún)
