附錄1-6
內(nèi)容可能有誤,歡迎大家指正。
附錄1:
(1)ARM匯編程序由 機器 指令、 匯編 指令和 偽 指令構(gòu)成。
(2)ARM偽指令可以分為以下幾類:符號定義偽指令、數(shù)據(jù)定義偽指令、匯編控制偽指令和宏指令等。
(3)假設存儲數(shù)據(jù)0x12345678于ARM微處理器內(nèi)存0X30000000開始的位置,則0X30000001內(nèi)存位置的數(shù)據(jù)為C(A.0X12 B.0X34 C.0X56 D.0X78)(采用小端模式進行存儲)
(4)一般情況下,ARM微處理器異常處理模式共有7種,機器啟動后第一條指令執(zhí)行的是A(A.復位異常處理函數(shù)指令 B.中斷異常處理指令 C.IRQ異常處理指令 D.指令預取終止異常)。
(5)調(diào)用函數(shù)FUN(X,Y,Z),則實參值分別通過 r0、r1 、 r2寄存器來進行傳遞,如果參數(shù)超過4個,則參數(shù)傳遞規(guī)則為通過棧進行傳遞。
(6)舉例列出一款ARM7TDMI微內(nèi)核的嵌入式微處理器S3C44BOX ,ARM920T微內(nèi)核的嵌入式微處理器S3C2410,ARM11內(nèi)核的嵌入式微處理器 S3C6410,并列舉2款64位ARM微內(nèi)核Cortex-A53、Cortex-A57。
(7)利用匯編和C混合編程,設計代碼完成求a,b,c中最大值功能,要求寫出匯編啟動代碼和C代碼。
1.匯編文件 asses.S
EXPORT Max
IMPORT Main
AREA Init,CODE,READONLY
ENTRY
MOV R13,#0X3008000
B Main
MAX
LDR R2,[R0],#4
loop
SUB R1,R1,#1
LDR R3,[R0],#4
CMP R2,R3
MOVLT R2,R3
CMP R1,#1
BEQ EXIT
B loop
exit
MOV R0,R2
MOV PC,LR
END
2.C 文件
//main.c
int Max(int *pa,int len);
void Main()
{
int a[5]={10,24,8,67,34};
Max(a,5);
}
附錄2:
1.嵌入式Linux操作系統(tǒng)包括bootloader、內(nèi)核、文件系統(tǒng) 三部分組成。
2.在PC機上Linux系統(tǒng)編譯使用的編譯器名為gcc,ARM處理器嵌入式編譯器名為arm-linux-gcc。
3.bootloader的功能:①引導操作系統(tǒng)內(nèi)核啟動②提供輔助命令工具。
4.列出最常用的bootloader:vivi、uboot、redboot、lilo、grub、etherboot。
5.在uboot中,打印開發(fā)板上環(huán)境變量值的命令為printenv,設置IP地址為192.168.1.1的命令為setenv ipaddr 192.168.1.1,假如嵌入式內(nèi)核名為vmlinux,通過tftp加載內(nèi)核的命令為setenv ipaddr 192.168.1.1,啟動嵌入式Linux內(nèi)核的命令為bootm。
6.從C語言角度來理解,嵌入式Linux內(nèi)核僅是眾多函數(shù)的集合體,其有一個類似于main的函數(shù),名稱為start_kernel。
7.嵌入式Linux內(nèi)核裁剪命令為make menuconfig;裁剪完成后生成配置選擇文件.config;編譯內(nèi)核命令為make zImage。
8.啟動linux后常用的命令如ifconfig、cp、ls等通常位于C(A.bootloaderB.內(nèi)核C.文件系統(tǒng))中;嵌入式Linux環(huán)境下生成文件系統(tǒng)的常用工具為mkyaffs2img;以yaffs方法為例,將嵌入式文件夾壓縮成一個yaffs2格式的文件系統(tǒng)命令為mkyaffs2img 文件夾 鏡像文件名。
9.構(gòu)建嵌入式Linux系統(tǒng)時,燒寫bootloader的工具為hjtag;燒寫Linux內(nèi)核一般使用A(A.bootloader B.文件系統(tǒng) C.交叉編譯器)來燒寫,燒寫文件系統(tǒng)一般使用A(A.bootloader B.文件系統(tǒng) C.交叉編譯器)來燒寫。
10.簡述構(gòu)建嵌入式Linux系統(tǒng)基本過程
三劍客:
裁剪編譯好 uboot 映像文件 uboot.bin
裁剪編譯好內(nèi)核 映像文件 uImage
裁剪編譯好文件系統(tǒng)映像文件 rootfs_qtopia_qt4.img
燒寫至NAND存儲設備
附錄3:
- Linux中自動生成makefile的工具集名稱為autotools;工具集包括aclocal、autoscan、autoconf、autoheader和automake等幾部分組成。
2.一個源碼文件hello.c利用自動生成makefile的工具集后得到文件一批文件后,利用命令#./configure生成Makefile,利用命令#make dist生成發(fā)行壓縮包文件hello.tar.gz。
3.嵌入式Linux應用程序移植常用configure命令生成Makefile,一般來說,指定安裝目錄為/opt/soft的命令為. /configure --prefix=/opt/soft;如果待生成的可執(zhí)行目標板為ARM處理器,則命令為. /configure --prefix=/opt/soft --HOST=arm-linux。
4.以web服務器boa移植為例,簡述其基本過程。
第一步完成Boa程序的移植。下載Boa源碼、生成Makefile文件、修改Makefile文件、編譯。
第二步完成Boa的配置,使其能夠支持CGI程序的執(zhí)行。修改Group、scrīptAlias、ServerName
第三步就是測試Boa能否正常工作。Boa的執(zhí)行、CGI腳本測試(編寫Helloworld.c程序、瀏覽)。
5.嵌入式數(shù)據(jù)庫經(jīng)常使用sqlite,為可以在開發(fā)板上運行的輕型數(shù)庫。通常情況下sqlite提供命令和函數(shù)編程兩種使用方式。
6.在sqlite下創(chuàng)建數(shù)據(jù)庫stu.db命令為sqlite3 stu. db;創(chuàng)建包含學號,姓名和電話號碼的數(shù)據(jù)表StuPhone命令為create table StuPhone( id integer primary key, name text, phoneNo text ) ;;插入10010201,wangming,13900008888記錄的命令為insert into StuPhone values(10010201, wangming, 13900008888)。
7.利用函數(shù)調(diào)用創(chuàng)建數(shù)據(jù)庫stu.db的形式為ret=sqlite3_open(const char *filename, sqlite3 **ppDb);;創(chuàng)建包含學號,姓名和電話號碼的數(shù)據(jù)表StuPhone函數(shù)調(diào)用形式為rec = sqlite3_exec(dbPtr, sql, 0, 0, & errMsg); sql = “CREATE TABLE COMPANY(”\……);";;插入10010201,wangming,13900008888記錄的函數(shù)調(diào)用形式為sqlite3_exec()。
附錄4:
- 嵌入式Linux內(nèi)核是可裁剪系統(tǒng),通常情況下使用模塊機制進行設計。模塊程序和應用程序分別位于Linux系統(tǒng)的內(nèi)核空間和用戶空間。
- 嵌入式Linux系統(tǒng)模塊程序hello.c被編譯成模塊hello.ko后,動態(tài)插入內(nèi)核的命令為#insmod hello. ko,查看Linux內(nèi)核中有哪些模塊的命令為#lsmod,刪除內(nèi)核中模塊hello.ko的命令為#rmmod hello。
3.編寫一模塊,向內(nèi)核中添加兩整數(shù)相加功能函數(shù)和兩整數(shù)相減功能函數(shù),并要求在加載模塊時打印出“hello,I am in kernel now!”,卸載模塊時打印“hello, I will leave from kernel now!”,編寫Makefile,并簡述加載到內(nèi)核和卸載出內(nèi)核的基本命令。
(1)模塊文件
#include <linux/kernel.h>
#include <linux / module.h> //1.頭文件
#include <linux/init.h>
int AddFun(int a,int b) //2.加載到內(nèi)核的功能函數(shù)
{
return a+b;
}
static int __init hello_init(void) //3.模塊加載和卸載函數(shù)
{
printk( “insert hetlo module into kernel!\n”):
return 0;
}
static void led_exit(void)
{
printk(“hello module leave from kernel!\n”);
return ;
}
module_init(hello_init);
module_exit(hello_exit);
MODULE LICENSE(“GPL”); //4.模塊許可證說明
(2) Makefile
obj-m: =hello. ko
all:
make – C /opt/linux-2. 6. 38 SUBDIRS=$(shell pwd) modules
clean:
rm -rf *. ko *. o
(3) 編譯和加載
#make
#inmsod hello. ko
附錄5:
- 在嵌入式Linux開發(fā)過程中,EmbeddedQT通常情況下用于C(A.內(nèi)核代碼B.驅(qū)動代碼C.圖形應用程序)設計。EmbeddedQT采用工具開發(fā)包的形式提供給用戶,一般情況下包括圖形設計器、QT 的 C++類庫和Makefile 制作工具,字體國際化工具等。
- QT開發(fā)中采用信號和插槽機制來連接兩個對象之間的通訊,假設對象a的clicked信號和對象b的handleFunction()相關聯(lián),對應語句為:connect(&a, SIGNAL(clicked() ) , &b, SLOT(handleFunction() ) ) ;
3.假設有嵌入式LED報警燈驅(qū)動設備文件/dev/led,點亮led燈調(diào)用函數(shù)ioctl(fd,LEDON),熄滅led燈調(diào)用函數(shù)ioctl(fd,LEDOFF),請設計QT應用程序完成如下任務,點擊ON按鈕點亮LED燈,點擊OFF按鈕熄滅LED燈。寫出這兩個按鈕的相關聯(lián)的函數(shù)。假設ON按鈕名稱為m on,OFF按鈕名稱為m off。
關聯(lián)函數(shù):
connect(m_Win, SIGNAL(clicked() ) , m_on, SLOT(LedOnFun() ) ) ;
connect(m_Win, SIGNAL(clicked() ) , m_off, SLOT(LedOffFun() ) ) ;
void LedOnFun( )
{
int fd;
fd=open(“/dev/leddev” , O_RDWR) ;
ioctl(fd, LEDON) ;
close(fd) ;
}
void LedOffFun()
{
int fd;
fd=open(“/dev/leddev” , O_RDWR) ;
ioctl(fd, LEDOFF) ;
close(fd) ;
}
附錄6:
- 嵌入式Linux驅(qū)動設備分為字符設備、塊設備和網(wǎng)絡設備三種類型,其中通常情況下鍵盤、鼠標、LCD屏等設備驅(qū)動屬于字符設備,硬盤設備屬于塊設備。
- 以模塊的方式向內(nèi)核添加功能函數(shù)int addFun(int a,int b)和int subFun(int a,int b),要求編寫模塊文件,Makefile文件,假設模塊名為hello.ko,寫出加載模塊到內(nèi)核的命令。
模塊文件
#include <linux/kernel.h>
#include <linux / module.h> //1.頭文件
#include <linux/init.h>
int AddFun(int a,int b) //2.加載到內(nèi)核的功能函數(shù)
{
return a+b;
}
int SubFun(int a,int b)
{
return a-b;
}
MODULE LICENSE(“GPL”); //4.模塊許可證說明
Makefile文件和加載函數(shù)見附錄四第四題。
設備要能被使用,通常需要設備驅(qū)動軟件,在Linux系統(tǒng)中,設備驅(qū)動驅(qū)動軟件位于A(A.內(nèi)核空間 B.用戶空間),假設有LED報警燈設備驅(qū)動軟件leddrv.ko,則加載該驅(qū)動軟件到內(nèi)核命令為_#insmod leddrv. ko,測試完成后,將該軟件從內(nèi)核中卸載命令為_ #rmmod leddrv_。
3. 除網(wǎng)絡設備外,設備驅(qū)動通常采用文件方式進行訪問,一般包括_打開設備、讀寫控制設備,最后關閉設備。在Linux中設備文件名本質(zhì)上是設備號,將兩者之間建立關聯(lián)的命令為mknod,假設LED設備驅(qū)動主設備號為253,次設備號為0,設備名為leddev,則建立設備文件的具體命令為#mknod /dev/leddev c 253 0_。
4.簡述編寫看門狗驅(qū)動基本步驟
編寫硬件驅(qū)動代碼, 包括:
編寫硬件接口函數(shù)
建立文件系統(tǒng)與硬件接口函數(shù)的關聯(lián)
注冊字符設備
添加模塊代碼
編譯設備驅(qū)動并加載到內(nèi)核, 包括:
編寫Makefile
編譯
加載
創(chuàng)建設備節(jié)點
編寫應用程序訪問底層設備驅(qū)動文章來源:http://www.zghlxwxcb.cn/news/detail-446905.html
第四部分:考試題型
考試題型分為填空題(選擇題)、問答題和設計題三種類型,分別占比為40%、40%和20%文章來源地址http://www.zghlxwxcb.cn/news/detail-446905.html
- 填空題
共20空,每空2分
如:
嵌入式應用程序hello.c,編譯成ARM平臺可執(zhí)行程序hello,編譯指令為arm-linux-gcc hello.c –o hello,依據(jù)所做實驗平臺,假設要將其從PC端搬運到ARM平臺,則使用什么工具完成A(A. ADS B.gcc C.串口超級終端)
填空題基本為教材和實驗指導書上內(nèi)容。 - 問答題
共3題,40分
如:
簡述嵌入式Linux系統(tǒng)構(gòu)建過程中根文件系統(tǒng)有哪幾部分組成,并簡述每一部分的基本構(gòu)建過程(要求寫出源碼名稱,解壓命令,裁剪命令、編譯命令和安裝命令等)
3道編程題有1道為教材上內(nèi)容,其余兩道均為實驗和課堂上所講內(nèi)容。
3.設計題
共1題,共20分
詳見第七講+第八講
主要考察大家對嵌入式系統(tǒng)的基本設計能力,題目結(jié)合實驗內(nèi)容進行考察,有較高難度,請大家務必對我們的實驗及實驗報告認真學習和總結(jié)。
到了這里,關于南郵-嵌入式復習附錄/習題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!