一、序列槽
1、一台有輸入、顯示部件,然後能夠連接配接的計算機的裝置叫做終端。Linux中用tty表示終端。控制台和終端相比隻是多了一項功能,它可以顯示系統資訊,比如核心消息、背景服務消息。啟動Linux核心前傳入的指令行參數“console=…”就是用來指定控制台。
2、序列槽也是一種終端裝置,在基本硬體操作的基礎上,還增加了很多軟體功能。驅動程式從上到下分為四層:終端裝置層、行規層、序列槽抽象層、序列槽晶片層。

drivers/serial下序列槽晶片層各晶片具體函數抽象為drivers/serial下serial_core.c和serial_core.h,字元裝置集中于drivers/char。行規層指定資料交換的規則,比如接收到TAB轉換為8個空格,接收到Ctrl+C轉換為SIGINT。終端裝置層向上提供統一的裝置接口,使得使用者不必關心具體終端的類型。
3、序列槽接收資料,以接收ls為例
(1)shell一直休眠,序列槽接收‘l’,儲存(緩沖區)、回顯
(2)接收‘s’儲存、回顯
(3)接收回車符喚醒shell程序,shell讀取儲存的“ls”,進一步處理
二、網卡
核心空間即網絡子系統。
系統調用接口:為使用者空間的應用程式提供一種通路核心網絡子系統的方法。
協定無關接口:提供通用方法使用底層傳輸層協定。
網絡協定:實際協定如TIC/IP、UDP
裝置無關層:提供各個裝置驅動程式通信的通用接口。
裝置驅動程式:移植重點,每個裝置具體的驅動程式。
如網卡dm9000,源檔案位于/driver/net/dm9000.c(具體操作函數)。既可以編進核心也可以編譯成一個子產品。入口函數都是dm9000_init
//向核心注冊平台驅動dm9000_driver
//名稱為dm9000,如果核心中有該裝置,就會調用dm9000_probe函數
dm9000_init(void)
{
printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME);
return platform_driver_register(&dm9000_driver); /* search board and register */
}
static struct platform_driver dm9000_driver = {
.driver = {
.name = "dm9000",
.owner = THIS_MODULE,
},
.probe = /driver/net/dm9000.c,
.remove = dm9000_drv_remove,
.suspend = dm9000_drv_suspend,
.resume = dm9000_drv_resume,
};
1、增加DM9000平台裝置
(1)增加平台裝置結構,在arch\arm\plat-s3c24xx\common-smdk.c
//确定該裝置使用的資源
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
/* DM9000 */
static struct resource s3c_dm9k_resource[] = {
[] = {
.start = S3C2410_CS4, /* ADDR2=0,發送位址時使用這個位址 */
.end = S3C2410_CS4 + ,
.flags = IORESOURCE_MEM,
},
[] = {
.start = S3C2410_CS4 + , /* ADDR2=1,傳輸資料時使用這個位址 */
.end = S3C2410_CS4 + + ,
.flags = IORESOURCE_MEM,
},
[] = {
.start = IRQ_EINT7, /* 中斷号 */
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ,
}
};
(2)加入核心裝置清單,也在arch\arm\plat-s3c24xx\common-smdk.c
static struct platform_device __initdata *smdk_devs[] = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
&s3c_device_dm9k,
#endif
#ifdef CONFIG_SERIAL_EXTEND_S3C24xx
&s3c_device_8250,
#endif
#ifdef CONFIG_TOUCHSCREEN_S3C2410
&s3c_device_ts,
#endif
};
(3)修改/driver/net/dm9000.c中dm9000_probe、dm9000_reset、dm9000_open(注冊中斷等)等函數。
2、使用網卡
在核心根目錄下執行 make menuconfig 在圖像界面中配置網卡(選擇編譯進核心或編譯成子產品)
然後執行 make uImage 在arch/arm/boot/uImage生成核心鏡像