日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式面试知识点总结 -- ARM篇

發(fā)布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式面试知识点总结 -- ARM篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、交叉編譯與移植

問題:

  • 問題一:簡單介紹一下交叉編譯與移植?

解答:

參看:S5PV210開發(fā) – 交叉編譯器
(1)下載安裝交叉編譯器
(2)增加/etc/profile環(huán)境變量

在最末尾添加:
export PATH=/usr/local/arm/arm-2009q3/bin/:$PATH
執(zhí)行如下指令讓環(huán)境變量生效:
#source /etc/profile
檢驗:
which arm-none-linux-gnueabi-gcc 查看所在位置
echo $PATH 查看環(huán)境變量

二、移植根文件系統(tǒng)

問題:

  • 問題一:簡單介紹根文件系統(tǒng)移植?
  • -問題二:常用文件系統(tǒng)有哪幾種?
    嵌入式系統(tǒng)中常用文件系統(tǒng)包括有 cramfs、 JFFS2、 NFS、 initrd、 yaffs2 以及squashfs。它們的特點如下:
    cramfs 和 JFFS2 具有好的空間特性,很適合嵌入式產(chǎn)品應用。
    cramfs 與 squashfs 為只讀文件系統(tǒng)。
    squashfs 壓縮率最高。
    JFFS2 為可讀寫文件系統(tǒng)。
    NFS 文件系統(tǒng)適用于開發(fā)初期的調試階段。
    yaffs2 文件系統(tǒng)只用于 NAND Flash。
    initrd 采用 cramfs 文件系統(tǒng),為只讀。

解答:

參看:Hi3516A開發(fā)–根文件系統(tǒng)
(1)利用busybox制作根文件系統(tǒng),編譯和安裝 busybox。
(2)創(chuàng)建并配置 etc、 lib、 dev 目錄的必需文件。
完成以上兩個步驟,一個完整的根文件系統(tǒng)就生成了。

A、etc 目錄可參考系統(tǒng)/etc 下的文件。其中最主要的文件包括 inittab、 fstab、 init.d/rcS文件等,這些文件最好從 busybox 的 examples 目錄下拷貝過來,根據(jù)需要自行修改。
B、dev 目錄下的設備文件,可以直接從系統(tǒng)中拷貝過來或者使用 mknod 命令生成需要的設備文件。拷貝文件時請使用 cp –R file,例如:
在dev目錄下創(chuàng)建兩個設備文件
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
sudo chmod 666 dev/console
sudo chmod 666 dev/null
C、 lib 目錄是存放應用程序所需要的庫文件,請根據(jù)應用程序需要拷貝相應的庫文件。

三、用戶態(tài)和內核態(tài)的轉換

問題:

  • 問題一:用戶態(tài)和內核態(tài)的轉換方式?

解答:

用戶態(tài)切換到內核態(tài)的3種方式:
(1)系統(tǒng)調用
這是用戶態(tài)進程主動要求切換到內核態(tài)的一種方式,用戶態(tài)進程通過系統(tǒng)調用申請使 用操作系統(tǒng)提供的服務程序完成工作,比如前例中fork()實際上就是執(zhí)行了一個創(chuàng)建新進程的系統(tǒng)調用。而系統(tǒng)調用的機制其核心還是使用了操作系統(tǒng)為用戶 特別開放的一個中斷來實現(xiàn),例如Linux的int 80h中斷。
(2)異常
當CPU在執(zhí)行運行在用戶態(tài)下的程序時,發(fā)生了某些事先不可知的異常,這時會觸發(fā)由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了內核態(tài),比如缺頁異常。
(3) 外圍設備的中斷
當外圍設備完成用戶請求的操作后,會向CPU發(fā)出相應的中斷信號,這時CPU會 暫停執(zhí)行下一條即將要執(zhí)行的指令轉而去執(zhí)行與中斷信號對應的處理程序,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個轉換的過程自然也就發(fā)生了由用戶態(tài)到 內核態(tài)的切換。比如硬盤讀寫操作完成,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。

這3種方式是系統(tǒng)在運行時由用戶態(tài)轉到內核態(tài)的最主要方式,其中系統(tǒng)調用可以認為是用戶進程主動發(fā)起的,異常和外圍設備中斷則是被動的。

四、linux內核態(tài)和用戶態(tài)之間的通信方式

問題:

  • 問題一:linux內核態(tài)和用戶態(tài)之間的通信方式?

解答:

內核態(tài)(Kernel Mode):在內核態(tài),代碼擁有完全的,不受任何限制的訪問底層硬件的能力。可以執(zhí)行任意的CPU指令,訪問任意的內存地址。內核態(tài)通常情況下,都是為那些最底層的,由操作系統(tǒng)提供的,可信可靠的代碼來運行的。內核態(tài)的代碼崩潰將是災難性的,它會影響到整個系統(tǒng)。
用戶態(tài)(User Mode):在用戶態(tài),代碼不具備直接訪問硬件或者訪問內存的能力,而必須借助操作系統(tǒng)提供的可靠的,底層的APIs來訪問硬件或者內存。由于這種隔離帶來的保護作用,用戶態(tài)的代碼崩潰(Crash),系統(tǒng)是可以恢復的。我們大多數(shù)的代碼都是運行在用戶態(tài)的。

syscall: 一般情況下,用戶進程是不能訪問內核的。它既不能訪問內核所在的內存空間,也不能調用內核中的函數(shù)。Linux內核中設置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序,用戶可以通過調用他們訪問linux內核的數(shù)據(jù)和函數(shù),這些系統(tǒng)調用接口(SCI)稱為系統(tǒng)調用;
procfs: 是一種特殊的偽文件系統(tǒng) ,是Linux內核信息的抽象文件接口,大量內核中的信息以及可調參數(shù)都被作為常規(guī)文件映射到一個目錄樹中,這樣我們就可以簡單直接的通過echo或cat這樣的文件操作命令對系統(tǒng)信息進行查取。
在這幾個通信方式中,選擇netlink,原因如下:

全雙工:procfs是基于文件系統(tǒng),用于內核向用戶發(fā)送消息;syscall是用戶訪問內核。它們都是單工通信方式。netlink 是一種特殊的通信方式,用于在內核空間和用戶空間傳遞消息,是一種雙工通信方式。使用地址協(xié)議簇AF_NETLINK,使用頭文件include/linux/netlink.h;
易于添加:為新特性添加system call、或者procfs是一件復雜的工作,它們會污染kernel(內核),破壞系統(tǒng)的穩(wěn)定性,這是非常危險的。Netlink的添加,對內核的影響僅在于向netlink.h中添加一個固定的協(xié)議類型,然后內核模塊和應用層的通信使用一套標準的API。

五、uboot啟動過程

問題:

  • 問題一:簡述uboot啟動過程?

解答:

大多數(shù)bootloader都分為stage1和stage2兩部分,u-boot也不例外。依賴于CPU體系結構的代碼(如設備初始化代碼等)通常都放在stage1且可以用匯編語言來實現(xiàn),而stage2則通常用C語言來實現(xiàn),這樣可以實現(xiàn)復雜的功能,而且有更好的可讀性和移植性。
1、Stage1 start.S代碼結構
u-boot的stage1代碼通常放在start.S文件中,他用匯編語言寫成,其主要代碼部分如下:
(1)定義入口。由于一個可執(zhí)行的Image必須有一個入口點,并且只能有一個全局入口,通常這個入口放在ROM(Flash)的0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。
(2)設置異常向量(Exception Vector)。
(3)設置CPU的速度、時鐘頻率及終端控制寄存器。
(4)初始化內存控制器。
(5)將ROM中的程序復制到RAM中。
(6)初始化堆棧。
(7)轉到RAM中執(zhí)行,該工作可使用指令ldr pc來完成。
2、Stage2 C語言代碼部分
lib_arm/board.c中的start arm boot是C語言開始的函數(shù)也是整個啟動代碼中C語言的主函數(shù),同時還是整個u-boot(armboot)的主函數(shù),該函數(shù)只要完成如下操作:
(1)調用一系列的初始化函數(shù)。
(2)初始化Flash設備。
(3)初始化系統(tǒng)內存分配函數(shù)。
(4)如果目標系統(tǒng)擁有NAND設備,則初始化NAND設備。
(5)如果目標系統(tǒng)有顯示設備,則初始化該類設備。
(6)初始化相關網(wǎng)絡設備,填寫IP、MAC地址等。
(7)進去命令循環(huán)(即整個boot的工作循環(huán)),接受用戶從串口輸入的命令,然后進行相應的工作。

六、linux設備分類

問題:

  • 問題一:設備分類有哪幾種?
    字符設備、塊設備、網(wǎng)絡設備。

七、內核/用戶空間的數(shù)據(jù)交換方法

問題:

  • 問題一:內核/用戶空間的數(shù)據(jù)交換方法?
    copy_to_user / copy_from_user

八、加載模塊,創(chuàng)建設備節(jié)點

問題:

  • 問題一:加載模塊,創(chuàng)建設備節(jié)點?
    加載模塊:
    insmod dev_fifo.ko
    創(chuàng)建設備節(jié)點
    mknod /dev/dev_fifo.ko c 168 0
    其中/dev/dev_fifo.ko 為設備節(jié)點, c 代表字符設備 ,168代表主設備號 ,0代表次設備號

總結

以上是生活随笔為你收集整理的嵌入式面试知识点总结 -- ARM篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。