Ⅰ 嵌入式linux系統開發詳解_嵌入式linux系統介紹
嵌入式Linux開發從下到上分為:嵌入式硬體開發、嵌入式驅動開發、嵌入式系統開發、嵌入式軟體開發。
一、嵌入式硬體開發:熟悉電路等知識,非常熟悉各種常用元器件,掌握模擬電路和數字電路設計的開發能力。熟練掌握嵌入式硬體知識,熟悉硬體開發模式和設計模式,熟悉ARM32位處理器嵌入式硬體平台開發、並具備產品開發經驗。精通常用的硬體設計工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般需要有4~8層高速PCB設計經驗。
二、嵌入式驅動開發:熟練掌握Linux操作系統、系統結構、計算機組成原理、數據結構相關知識。熟悉嵌入式ARM開發,至少掌握Linux字元驅動程序開發。具有單片機、ARM嵌入式處理器的移植開發能力,理解硬體原理圖,能獨立完成相關硬體驅動調試,具有扎實的硬體知識,能夠根據晶元手冊編寫軟體驅動程序。
三、嵌入式系統開發:掌握Linux系統配置,精通處理器體系結構、編程環境、指令集、定址方式、調試、匯編和混合編程等方面的內容;掌握Linux文件系統製作,熟悉各種文件系統格式(YAFFS2、JAFFS2、RAMDISK等);熟悉嵌入式Linux啟動流程,熟悉Linux配置文件的修改;掌握內核裁減、內核移植、交叉編譯、內核調試、啟動程序Bootloader編寫、根文件系統製作和集成部前胡署Linux系統等整個流程;、熟悉搭建Linux軟體開發環境(庫文件的交叉編譯及環境配置等);
四、嵌入式軟體開發:精通Linux操作系統的概念和安裝方法、Linux下的基本命令、管理配置和編輯器,包括VI編輯器,GCC編譯器,GDB調試器和Make項目乎悔敗管理工具等知識;精通C語言的高級編程知識,包括函數與程序結構、指針、數組、常用演算法、庫函數的使用等知識、數據結構的基礎內容,包括鏈表、隊列等;掌握面向對象編程的基本思想,以及C語言的基礎內容;精通嵌入式Linux下的程序設計,精通嵌入式Linux開發環境,包括系統編程、文件I/O、多進程和多線程、網路編程、GUI圖形界面編程、資料庫;熟悉常用的歲顫圖形庫的編程,如QT、GTK、miniGUI、fltk、nano-x等。
所以如果你要做嵌入式軟體開發的話,上面那些知識基本夠用了。
Ⅱ 嵌入式Linux中如何實現應用程序與驅動程序函數介面問題,以GPIO為例
嵌入式Linux中如何實現應用程序與驅動程序函數介面問題,以GPIO為例
驅動中的函數定義:
static int sbc2440_leds_ioctl(
struct inode *inode,
struct file *file,
unsigned int cmd,
unsigned long arg)
{
switch(cmd) {
case 0:
case 1:
if (arg > 4) {
return -EINVAL;
}
s3c2410_gpio_setpin(led_table[arg], !cmd);
return 0;
default:
return -EINVAL;
}
}
應用程序中的函數定義:
ioctl(fd, on, led_no);
不明白的地方是函數名都不一樣,應用程序中的ioctl函數是如何將參數傳遞到驅動程序sbc2440_leds_ioctl中的?
xicain
Ⅲ 如何在嵌入式LINUX中增加自己的設備驅動程序
Linux驅動程序的使用可以按照兩種方式編譯,一種是靜態編譯進內核,另一種是編譯成模塊以供動態載入。由於uClinux不支持模塊動態載入,而且嵌入式LINUX不能夠象桌面LINUX那樣靈活的使用insmod/rmmod載入卸載設備驅動程序,因而這里只介紹將設備驅動程序靜態編譯進uClinux內核的方法。
下面以UCLINUX為例,介紹在一個以模塊方式出現的驅動程序test.c基礎之上,將其編譯進內核的一系列步驟:
(1)
改動test.c源帶代碼
第一步,將原來的:
#include
#include
char
kernel_version[]=UTS_RELEASE;
改動為:
#ifdef
MODULE
#include
#include
char
kernel_version[]=UTS_RELEASE;
#else
#define
MOD_INC_USE_COUNT
#define
MOD_DEC_USE_COUNT
#endif
第二步,新建函數int
init_test(void)
將設備注冊寫在此處:
result=register_chrdev(254,"test",&test_fops);
(2)將test.c復制到/uclinux/linux/drivers/char目錄下,並且在/uclinux/linux/drivers/char目錄下mem.c中,int
chr_dev_init(
)函數中增加如下代碼:
#ifdef
CONFIG_TESTDRIVE
init_test();
#endif
(3)在/uclinux/linux/drivers/char目錄下Makefile中增加如下代碼:
ifeq($(CONFIG_TESTDRIVE),y)
L_OBJS+=test.o
Endif
(4)在/uclinux/linux/arch/m68knommu目錄下config.in中字元設備段里增加如下代碼:
bool
'support
for
testdrive'
CONFIG_TESTDRIVE
y
(5)
運行make
menuconfig(在menuconfig的字元設備選項里你可以看見我們剛剛添加的'support
for
testdrive'選項,並且已經被選中);make
dep;make
linux;make
linux.text;make
linux.data;cat
linux.text
linux.data
>
linux.bin。
(6)
在
/uclinux/romdisk/romdisk/dev/目錄下創建設備:
mknod
test
c
254
0
並且在/uclinux/appsrc/下運行make,生成新的Romdisk.s19文件。
到這里,在UCLINUX中增加設備驅動程序的工作可以說是完成了,只要將新的linux.bin與Romdisk