第一篇:電子科技大學 實驗報告 創新學分 實驗課
電子科技大學
學生姓名:
學號:
指導教師:
日期:
實 驗 報告
一、實驗室名稱:
二、實驗項目名稱:
三、實驗原理:
四、實驗目的:
五、實驗內容:
六、實驗器材(設備、元器件):
七、實驗步驟:
八、實驗數據及結果分析:
九、實驗結論:
十、總結及心得體會:
十一、對本實驗過程及方法、手段的改進建議:
平時成績:實作成績:
報告評分:
總成績:
指導教師簽字:
第二篇:電子科技大學實驗報告格式
九、實驗結論:
十、總結及心得體會:
十一、對本實驗過程及方法、手段的改進建議:
報告評分:
指導教師簽字: 電子科技大學
學生姓名:學
號:指導教師:日
期:實 驗 報 告
****年**月**日
一、實驗室名稱:
二、實驗項目名稱:
三、實驗原理:
四、實驗目的:
五、實驗內容:
六、實驗器材(設備、元器件):
七、實驗步驟:
八、實驗數據及結果分析:
第三篇:電子科技大學實驗報告格式
九、實驗結論:
十、總結及心得體會:
十一、對本實驗過程及方法、手段的改進建議:
報告評分:指導教師簽字:
電子科技大學
學生姓名:
學號:
指導教師:
日期:實 驗 報 告年月日
一、實驗室名稱:
二、實驗項目名稱:
三、實驗原理:
四、實驗目的:
五、實驗內容:
六、實驗器材(設備、元器件):
七、實驗步驟:
八、實驗數據及結果分析:
第四篇:電子科技大學微機實驗報告 實驗4
實驗四基于ARM的嵌入式Linux開發環境建立 【實驗目的】 1.掌握嵌入式Linux 開發環境的基本流程。2.熟悉Linux 操作系統 3.熟悉嵌入式開發平臺
【實驗內容】
在PC機虛擬機下的Linux系統中建立基于ARM 的嵌入式Linux 開發環境。
1.學會網口的配置 2.Minicom端口的使用
【預備知識】
1.了解ARM9處理器結構 2.了解Linux 系統結構
3.了解ARM開發板使用常識
【實驗設備和工具】
硬件:PC機Pentium100以上,ARM嵌入式開發平臺
軟件:PC機Linux 操作系統+MINICOM+AMRLINUX開發環境
【實驗原理】
1.交叉編譯器在一種計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼,我們就稱這種編譯器支持交叉編譯,這個編譯過程就叫交叉編譯。簡單地說,就是在一個平臺上生成另一個平臺上的可執行代碼。這里需要注意的是所謂平臺,實際上包含兩個概念:體系結構
(Architecture)、操作系統(OperatingSystem)。同一個體系結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。舉例來說,我們常說的x86 Linux平臺實際上是Intelx86體系結構和Linuxforx86操作系統的統稱;而x86WinNT平臺 實際上是Intelx86體系結構和Windows NTforx86操作系統的簡稱。交叉編譯這個概念的出現和流行是和嵌入式系統的廣泛發展同步的。我們常用的計算機軟
件,都需要通過編譯的方式,把使用高級計算機語言編寫的代碼(比如C代碼)編譯(compile)成計算機可以識別和執行的二進制代碼。比如,我們在Windows平臺上,可使用Visual C++ 開發環境,編寫程序并編譯成可執行程序。這種方式下,我們使用PC平臺上的Windows工具開發針對Windows本身的可執行程序,這種編譯過程稱為nativecompilation,中文可理解
為本機編譯。然而,在進行嵌入式系統的開發時,運行程序的目標平臺通常具有有限的存儲空間和運算能力,比如常見的ARM平臺,其一般的靜態存儲空間大概是16到32MB,而CPU 的主頻大概在100MHz到500MHz之間。這種情況下,在ARM平臺上進行本機編譯就不太可能了,這是因為一般的編譯工具鏈(compilationtoolchain)需要很大的存儲空間,并需要很強 的CPU運算能力。為了解決這個問題,交叉編譯工具就應運而生了。通過交叉編譯工具,我們就可以在CPU能力很強、存儲空間足夠的主機平臺上(比如PC上)編譯出針對其他平臺的可執行程序。
要進行交叉編譯,我們需要在主機平臺上安裝對應的交叉編譯工具鏈(crosscompilation tool-chain),然后用這個交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標平臺上運行的代碼。常見的交叉編譯例子如下:
1、在WindowsPC上,利用RVDS(ARM開發環境),使用armcc編譯器,則可編譯出針對ARMCPU的可執行代碼。
2、在LinuxPC上,利用arm-linux-gcc編譯器,可編譯出針對LinuxARM平臺的可執行代碼。
3、在Windows PC上,利用cygwin環境,運行arm-elf-gcc編譯器,可編譯出針對ARMCPU的可執行代碼。
2.NFS服務
NFS是Net FileSystem的簡寫,即網絡文件系統.網絡文件系統是FreeBSD支持的文件系統中的一種,也被稱為NFS.NFS允許一個系統在網絡上與它人共享目錄和文件。通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系
統上的文件。
NFS至少有兩個主要部分:一臺服務器和一臺(或者更多)客戶機??蛻魴C遠程訪問存放在服務器上的數據。為了正常工作,一些進程需要被配置并運行。
在本實驗中就是將PC機作為服務器,而將ARM開發板作為客戶機,這樣ARM開發板就可以遠程
訪問存放在在PC機上的數據,這樣可以縮短研發周期,更方便的調試程序。
【實驗步驟】
1.雙擊桌面上VMWARE,打開Linux 虛擬機 2.點擊啟動虛擬機,啟動虛擬機 3.以root身份登陸虛擬機,密碼123456
4.其他步驟詳見實驗指導書
【實驗結果和程序】
基于ARM 的嵌入式Linux開發環境建立完畢。
【思考題】
1.如何驗證交叉編譯器已安裝成功? 答:在終端輸入命令:cd/arm/rootfs/home/driver(文件夾里已有test_led.c文件)arm-linux-gcc–o test_ledtest_led.c
若有可執行文件test_led生成則表示交叉編譯器已安裝成功
2.如果我們需要變更根文件系統的目錄,該如何設置使得ARM開發板可以成功掛載?答:修改/etc/exports 文件的內容,將/arm/rootfs*(rw,sync,no_root_squash)改為/XX/XXX
*(rw,sync,no_root_squash)(/XX/XXX為變更后點的文件目錄)
3.怎么在u-boot命令行下修改ARM 開發板的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開發板的新IP。
【實驗結論】
本實驗實現了基于ARM 的嵌入式Linux 開發環境建立
第五篇:電子科技大學微機實驗報告 實驗5
實驗五 基于ARM的模塊方式驅動程序實驗 【實驗目的】 1.掌握Linux 系統下設備驅動程序的作用與編寫技巧 2.掌握Linux 驅動程序模塊加載和卸載的方法 3.了解Linux 內核中的makefile和kconfig文件
【實驗內容】
1.基于s3c2440 開發板編寫led 驅動程序。2.將編寫好的led驅動加入linux內核中,修改makefile和kconfig文件,配置和編譯內核。3.編寫關于led 的測試程序,交叉編譯后運行,控制led 燈的亮滅。
【預備知識】
1.了解ARM9處理器結構和Linux 系統結構
2.熟練掌握C語言。
【實驗設備和工具】
? 硬件:ARM嵌入式開發平臺,PC機Pentium100 以上。
? 軟件:PC機Linux操作系統+MINICOM+AMRLINUX 開發環境
【實驗原理】
?
linux設備驅動程序 ? 驅動的模塊式加載和卸載
? 編譯模塊
? 裝載和卸載模塊
? led 驅動的原理
在本開發板上有八個led指示燈,從下往上分別為LED0-LED7。這八個led燈都是接的芯片上的gpio口(通用功能輸入輸出口)。在本實驗的開發板硬件設計中,當led 燈對應的gpio的電平為低時,led燈被點亮;當led燈對應的gpio的電平為高時,led燈滅。本驅動的作用就是通過設置對應gpio口的電平來控制led 的亮滅。
因為ARM 芯片內的GPIO口都是復用的,即它可以被配置為多種不同的功能,本實
驗是使用它的普通的I/O口的輸出功能,故需要對每個GPIO口進行配置。在內核中已經定義了對GPIO口進行配置的函數,我們只需要調用這些函數就可以完成對GPIO口的配置。
【實驗步驟】實驗程
序運行效果:
程序會提示:“pleaseenterthe led status”
輸入與希望顯示的led狀態對應的ledstatus值(輸入十進制值即可),觀察led 的顯示情況。例如:
? 輸入數字“3”,對應的二進制數字為00000011
故點亮LED2~LED7
? 輸入數字“4”,對應的二進制數字為00000100
故點亮LED0,LED1,LED3~LED7
【實驗結果和程序】
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(“led device openn”);
return 0;
} staticints3c2440_Led_release(structinode*inode,struct file*filp)
{
printk(“led 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, “led_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.設備驅動程序的功能是什么?答:設備驅動的功能就是將系統提供的調用映射到作用于實際硬件的和設備相關的操作上。
2.模塊化的最大優點是什么?答:可以在系統正在運行著的時候給內核增加模塊
提供的功能(也可以移除功能)。
3.如果在驅動模塊中刪除module_exit(s3c2440_Led_exit);后會有什么影響?
答:這個模塊將不能被移除。
4.驅動代碼中調用的宏MKDEV 的作用是什么?答:獲取設備在設備表中的位置。輸入主設備號,從設備號,返回位置號。
【實驗結論】
本實驗實現了linux環境下的led燈驅動的添加。