第一篇:電子科技大學(xué) 實(shí)驗(yàn)報(bào)告 創(chuàng)新學(xué)分 實(shí)驗(yàn)課
電子科技大學(xué)
學(xué)生姓名:
學(xué)號:
指導(dǎo)教師:
日期:
實(shí) 驗(yàn) 報(bào)告
一、實(shí)驗(yàn)室名稱:
二、實(shí)驗(yàn)項(xiàng)目名稱:
三、實(shí)驗(yàn)原理:
四、實(shí)驗(yàn)?zāi)康模?/p>
五、實(shí)驗(yàn)內(nèi)容:
六、實(shí)驗(yàn)器材(設(shè)備、元器件):
七、實(shí)驗(yàn)步驟:
八、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:
九、實(shí)驗(yàn)結(jié)論:
十、總結(jié)及心得體會:
十一、對本實(shí)驗(yàn)過程及方法、手段的改進(jìn)建議:
平時成績:實(shí)作成績:
報(bào)告評分:
總成績:
指導(dǎo)教師簽字:
第二篇:電子科技大學(xué)實(shí)驗(yàn)報(bào)告格式
九、實(shí)驗(yàn)結(jié)論:
十、總結(jié)及心得體會:
十一、對本實(shí)驗(yàn)過程及方法、手段的改進(jìn)建議:
報(bào)告評分:
指導(dǎo)教師簽字: 電子科技大學(xué)
學(xué)生姓名:學(xué)
號:指導(dǎo)教師:日
期:實(shí) 驗(yàn) 報(bào) 告
****年**月**日
一、實(shí)驗(yàn)室名稱:
二、實(shí)驗(yàn)項(xiàng)目名稱:
三、實(shí)驗(yàn)原理:
四、實(shí)驗(yàn)?zāi)康模?/p>
五、實(shí)驗(yàn)內(nèi)容:
六、實(shí)驗(yàn)器材(設(shè)備、元器件):
七、實(shí)驗(yàn)步驟:
八、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:
第三篇:電子科技大學(xué)實(shí)驗(yàn)報(bào)告格式
九、實(shí)驗(yàn)結(jié)論:
十、總結(jié)及心得體會:
十一、對本實(shí)驗(yàn)過程及方法、手段的改進(jìn)建議:
報(bào)告評分:指導(dǎo)教師簽字:
電子科技大學(xué)
學(xué)生姓名:
學(xué)號:
指導(dǎo)教師:
日期:實(shí) 驗(yàn) 報(bào) 告年月日
一、實(shí)驗(yàn)室名稱:
二、實(shí)驗(yàn)項(xiàng)目名稱:
三、實(shí)驗(yàn)原理:
四、實(shí)驗(yàn)?zāi)康模?/p>
五、實(shí)驗(yàn)內(nèi)容:
六、實(shí)驗(yàn)器材(設(shè)備、元器件):
七、實(shí)驗(yàn)步驟:
八、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:
第四篇:電子科技大學(xué)微機(jī)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)4
實(shí)驗(yàn)四基于ARM的嵌入式Linux開發(fā)環(huán)境建立 【實(shí)驗(yàn)?zāi)康摹?1.掌握嵌入式Linux 開發(fā)環(huán)境的基本流程。2.熟悉Linux 操作系統(tǒng) 3.熟悉嵌入式開發(fā)平臺
【實(shí)驗(yàn)內(nèi)容】
在PC機(jī)虛擬機(jī)下的Linux系統(tǒng)中建立基于ARM 的嵌入式Linux 開發(fā)環(huán)境。
1.學(xué)會網(wǎng)口的配置 2.Minicom端口的使用
【預(yù)備知識】
1.了解ARM9處理器結(jié)構(gòu) 2.了解Linux 系統(tǒng)結(jié)構(gòu)
3.了解ARM開發(fā)板使用常識
【實(shí)驗(yàn)設(shè)備和工具】
硬件:PC機(jī)Pentium100以上,ARM嵌入式開發(fā)平臺
軟件:PC機(jī)Linux 操作系統(tǒng)+MINICOM+AMRLINUX開發(fā)環(huán)境
【實(shí)驗(yàn)原理】
1.交叉編譯器在一種計(jì)算機(jī)環(huán)境中運(yùn)行的編譯程序,能編譯出在另外一種環(huán)境下運(yùn)行的代碼,我們就稱這種編譯器支持交叉編譯,這個編譯過程就叫交叉編譯。簡單地說,就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。這里需要注意的是所謂平臺,實(shí)際上包含兩個概念:體系結(jié)構(gòu)
(Architecture)、操作系統(tǒng)(OperatingSystem)。同一個體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng);同樣,同一個操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。舉例來說,我們常說的x86 Linux平臺實(shí)際上是Intelx86體系結(jié)構(gòu)和Linuxforx86操作系統(tǒng)的統(tǒng)稱;而x86WinNT平臺 實(shí)際上是Intelx86體系結(jié)構(gòu)和Windows NTforx86操作系統(tǒng)的簡稱。交叉編譯這個概念的出現(xiàn)和流行是和嵌入式系統(tǒng)的廣泛發(fā)展同步的。我們常用的計(jì)算機(jī)軟
件,都需要通過編譯的方式,把使用高級計(jì)算機(jī)語言編寫的代碼(比如C代碼)編譯(compile)成計(jì)算機(jī)可以識別和執(zhí)行的二進(jìn)制代碼。比如,我們在Windows平臺上,可使用Visual C++ 開發(fā)環(huán)境,編寫程序并編譯成可執(zhí)行程序。這種方式下,我們使用PC平臺上的Windows工具開發(fā)針對Windows本身的可執(zhí)行程序,這種編譯過程稱為nativecompilation,中文可理解
為本機(jī)編譯。然而,在進(jìn)行嵌入式系統(tǒng)的開發(fā)時,運(yùn)行程序的目標(biāo)平臺通常具有有限的存儲空間和運(yùn)算能力,比如常見的ARM平臺,其一般的靜態(tài)存儲空間大概是16到32MB,而CPU 的主頻大概在100MHz到500MHz之間。這種情況下,在ARM平臺上進(jìn)行本機(jī)編譯就不太可能了,這是因?yàn)橐话愕木幾g工具鏈(compilationtoolchain)需要很大的存儲空間,并需要很強(qiáng) 的CPU運(yùn)算能力。為了解決這個問題,交叉編譯工具就應(yīng)運(yùn)而生了。通過交叉編譯工具,我們就可以在CPU能力很強(qiáng)、存儲空間足夠的主機(jī)平臺上(比如PC上)編譯出針對其他平臺的可執(zhí)行程序。
要進(jìn)行交叉編譯,我們需要在主機(jī)平臺上安裝對應(yīng)的交叉編譯工具鏈(crosscompilation tool-chain),然后用這個交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標(biāo)平臺上運(yùn)行的代碼。常見的交叉編譯例子如下:
1、在WindowsPC上,利用RVDS(ARM開發(fā)環(huán)境),使用armcc編譯器,則可編譯出針對ARMCPU的可執(zhí)行代碼。
2、在LinuxPC上,利用arm-linux-gcc編譯器,可編譯出針對LinuxARM平臺的可執(zhí)行代碼。
3、在Windows PC上,利用cygwin環(huán)境,運(yùn)行arm-elf-gcc編譯器,可編譯出針對ARMCPU的可執(zhí)行代碼。
2.NFS服務(wù)
NFS是Net FileSystem的簡寫,即網(wǎng)絡(luò)文件系統(tǒng).網(wǎng)絡(luò)文件系統(tǒng)是FreeBSD支持的文件系統(tǒng)中的一種,也被稱為NFS.NFS允許一個系統(tǒng)在網(wǎng)絡(luò)上與它人共享目錄和文件。通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠(yuǎn)端系
統(tǒng)上的文件。
NFS至少有兩個主要部分:一臺服務(wù)器和一臺(或者更多)客戶機(jī)??蛻魴C(jī)遠(yuǎn)程訪問存放在服務(wù)器上的數(shù)據(jù)。為了正常工作,一些進(jìn)程需要被配置并運(yùn)行。
在本實(shí)驗(yàn)中就是將PC機(jī)作為服務(wù)器,而將ARM開發(fā)板作為客戶機(jī),這樣ARM開發(fā)板就可以遠(yuǎn)程
訪問存放在在PC機(jī)上的數(shù)據(jù),這樣可以縮短研發(fā)周期,更方便的調(diào)試程序。
【實(shí)驗(yàn)步驟】
1.雙擊桌面上VMWARE,打開Linux 虛擬機(jī) 2.點(diǎn)擊啟動虛擬機(jī),啟動虛擬機(jī) 3.以root身份登陸虛擬機(jī),密碼123456
4.其他步驟詳見實(shí)驗(yàn)指導(dǎo)書
【實(shí)驗(yàn)結(jié)果和程序】
基于ARM 的嵌入式Linux開發(fā)環(huán)境建立完畢。
【思考題】
1.如何驗(yàn)證交叉編譯器已安裝成功? 答:在終端輸入命令:cd/arm/rootfs/home/driver(文件夾里已有test_led.c文件)arm-linux-gcc–o test_ledtest_led.c
若有可執(zhí)行文件test_led生成則表示交叉編譯器已安裝成功
2.如果我們需要變更根文件系統(tǒng)的目錄,該如何設(shè)置使得ARM開發(fā)板可以成功掛載?答:修改/etc/exports 文件的內(nèi)容,將/arm/rootfs*(rw,sync,no_root_squash)改為/XX/XXX
*(rw,sync,no_root_squash)(/XX/XXX為變更后點(diǎn)的文件目錄)
3.怎么在u-boot命令行下修改ARM 開發(fā)板的IP?
答:輸入setenvip=x.x.x.x:192.168.0.1:192.168.0.1:255.255.255.0:uestc:eth0:off
Saveenv
x,x,x,x為ARM開發(fā)板的新IP。
【實(shí)驗(yàn)結(jié)論】
本實(shí)驗(yàn)實(shí)現(xiàn)了基于ARM 的嵌入式Linux 開發(fā)環(huán)境建立
第五篇:電子科技大學(xué)微機(jī)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)5
實(shí)驗(yàn)五 基于ARM的模塊方式驅(qū)動程序?qū)嶒?yàn) 【實(shí)驗(yàn)?zāi)康摹?1.掌握Linux 系統(tǒng)下設(shè)備驅(qū)動程序的作用與編寫技巧 2.掌握Linux 驅(qū)動程序模塊加載和卸載的方法 3.了解Linux 內(nèi)核中的makefile和kconfig文件
【實(shí)驗(yàn)內(nèi)容】
1.基于s3c2440 開發(fā)板編寫led 驅(qū)動程序。2.將編寫好的led驅(qū)動加入linux內(nèi)核中,修改makefile和kconfig文件,配置和編譯內(nèi)核。3.編寫關(guān)于led 的測試程序,交叉編譯后運(yùn)行,控制led 燈的亮滅。
【預(yù)備知識】
1.了解ARM9處理器結(jié)構(gòu)和Linux 系統(tǒng)結(jié)構(gòu)
2.熟練掌握C語言。
【實(shí)驗(yàn)設(shè)備和工具】
? 硬件:ARM嵌入式開發(fā)平臺,PC機(jī)Pentium100 以上。
? 軟件:PC機(jī)Linux操作系統(tǒng)+MINICOM+AMRLINUX 開發(fā)環(huán)境
【實(shí)驗(yàn)原理】
?
linux設(shè)備驅(qū)動程序 ? 驅(qū)動的模塊式加載和卸載
? 編譯模塊
? 裝載和卸載模塊
? led 驅(qū)動的原理
在本開發(fā)板上有八個led指示燈,從下往上分別為LED0-LED7。這八個led燈都是接的芯片上的gpio口(通用功能輸入輸出口)。在本實(shí)驗(yàn)的開發(fā)板硬件設(shè)計(jì)中,當(dāng)led 燈對應(yīng)的gpio的電平為低時,led燈被點(diǎn)亮;當(dāng)led燈對應(yīng)的gpio的電平為高時,led燈滅。本驅(qū)動的作用就是通過設(shè)置對應(yīng)gpio口的電平來控制led 的亮滅。
因?yàn)锳RM 芯片內(nèi)的GPIO口都是復(fù)用的,即它可以被配置為多種不同的功能,本實(shí)
驗(yàn)是使用它的普通的I/O口的輸出功能,故需要對每個GPIO口進(jìn)行配置。在內(nèi)核中已經(jīng)定義了對GPIO口進(jìn)行配置的函數(shù),我們只需要調(diào)用這些函數(shù)就可以完成對GPIO口的配置。
【實(shí)驗(yàn)步驟】實(shí)驗(yàn)程
序運(yùn)行效果:
程序會提示:“pleaseenterthe led status”
輸入與希望顯示的led狀態(tài)對應(yīng)的ledstatus值(輸入十進(jìn)制值即可),觀察led 的顯示情況。例如:
? 輸入數(shù)字“3”,對應(yīng)的二進(jìn)制數(shù)字為00000011
故點(diǎn)亮LED2~LED7
? 輸入數(shù)字“4”,對應(yīng)的二進(jìn)制數(shù)字為00000100
故點(diǎn)亮LED0,LED1,LED3~LED7
【實(shí)驗(yàn)結(jié)果和程序】
C語言程序:
#include
static intLedMajor=231;
staticintLedMinor=0;
static charledstatus=0xff;staticstructclass*s3c2440_class;staticstructcdev *s3c2440_led_cdev;
/*
******************************************************************************* ************************
** Function name:Update_led()**Descriptions **Input :NONE **Output :NONE :update the led status
******************************************************************************* ************************
*/ staticvoid Update_led(void)
{
if(ledstatus&0x01)
s3c2410_gpio_setpin(S3C2410_GPC7,1);//LED0滅
else
s3c2410_gpio_setpin(S3C2410_GPC7,0);//LED0亮
if(ledstatus&0x02)
s3c2410_gpio_setpin(S3C2410_GPC5,1);//LED1滅
else
s3c2410_gpio_setpin(S3C2410_GPC5,0);//LED1亮
if(ledstatus&0x04)
s3c2410_gpio_setpin(S3C2410_GPH9,1);//LED2滅
else
s3c2410_gpio_setpin(S3C2410_GPH9,0);//LED2亮
if(ledstatus&0x08)
s3c2410_gpio_setpin(S3C2410_GPB4,1);//LED3滅
else
s3c2410_gpio_setpin(S3C2410_GPB4,0);//LED3亮
if(ledstatus&0x10)
s3c2410_gpio_setpin(S3C2410_GPG5,1);//LED4滅
else
s3c2410_gpio_setpin(S3C2410_GPG5,0);//LED4亮
if(ledstatus&0x20)
s3c2410_gpio_setpin(S3C2410_GPG6,1);//LED5滅
else
s3c2410_gpio_setpin(S3C2410_GPG6,0);//LED5亮
if(ledstatus&0x40)
s3c2410_gpio_setpin(S3C2410_GPG7,1);//LED6滅elses3c2410_gpio_setpin(S3C2410_GPG7,0);//LED6亮
if(ledstatus&0x80)
s3c2410_gpio_setpin(S3C2410_GPG8,1);//LED7滅
else
s3c2410_gpio_setpin(S3C2410_GPG8,0);//LED7亮
}
staticssize_ts3c2440_Led_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){
copy_from_user(&ledstatus,buffer,sizeof(ledstatus));
Update_led();
printk(“write: led=0x%x,count=%dn”,ledstatus,count);returnsizeof(ledstatus);} staticints3c2440_Led_open(structinode*inode,struct file *filp)
{
printk(“l(fā)ed device openn”);
return 0;
} staticints3c2440_Led_release(structinode*inode,struct file*filp)
{
printk(“l(fā)ed device releasen”);
return 0;} staticstructfile_operationss3c2440_fops={.owner=THIS_MODULE,.open=s3c2440_Led_open,.write=s3c2440_Led_write,.release=s3c2440_Led_release, };
staticintinits3c2440_Led_init(void)
{
dev_ts3c2440_leds_devno;
/*configure the gpiofor leds*/
s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPG6,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPG7,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPG8,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_OUTPUT);
s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT);
Update_led();/*registerthe devnumber*/ s3c2440_leds_devno=MKDEV(LedMajor,LedMinor);ret=register_chrdev_region(s3c2440_leds_devno, 1,DEVICE_NAME);
/*registerthe chardevice*/
s3c2440_led_cdev=cdev_alloc();if
(s3c2440_led_cdev!= NULL)
{ cdev_init(s3c2440_led_cdev, &s3c2440_fops);s3c2440_led_cdev->owner=THIS_MODULE;if(cdev_add(s3c2440_led_cdev, s3c2440_leds_devno, 1))
printk(KERN_NOTICE “Something wrong when addings3c2440_led_cdev!n”);
else
printk(“Success addings3c2440_led_cdev!n”);} /*create the device node in /dev*/ s3c2440_class =class_create(THIS_MODULE, “l(fā)ed_class”);class_device_create(s3c2440_class, NULL, s3c2440_leds_devno, NULL, DEVICE_NAME);
printk(DEVICE_NAME “ initializedn”);
return 0;
}
staticvoid exits3c2440_Led_exit(void)
cdev_del(s3c2440_led_cdev);class_device_destroy(s3c2440_class, MKDEV(LedMajor,LedMinor));class_destroy(s3c2440_class);printk(DEVICE_NAME “ removedn”);
}
module_init(s3c2440_Led_init);
module_exit(s3c2440_Led_exit);
【思考題】
1.設(shè)備驅(qū)動程序的功能是什么?答:設(shè)備驅(qū)動的功能就是將系統(tǒng)提供的調(diào)用映射到作用于實(shí)際硬件的和設(shè)備相關(guān)的操作上。
2.模塊化的最大優(yōu)點(diǎn)是什么?答:可以在系統(tǒng)正在運(yùn)行著的時候給內(nèi)核增加模塊
提供的功能(也可以移除功能)。
3.如果在驅(qū)動模塊中刪除module_exit(s3c2440_Led_exit);后會有什么影響?
答:這個模塊將不能被移除。
4.驅(qū)動代碼中調(diào)用的宏MKDEV 的作用是什么?答:獲取設(shè)備在設(shè)備表中的位置。輸入主設(shè)備號,從設(shè)備號,返回位置號。
【實(shí)驗(yàn)結(jié)論】
本實(shí)驗(yàn)實(shí)現(xiàn)了linux環(huán)境下的led燈驅(qū)動的添加。