歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux-3.4.4內核在XC2440上移植成功

很久沒有關心linux內核版本的,現在已經出到了3.4.4,3.5的穩定版本也快出了

決定將XC2440的2.6.37版本升級到linux-3.4.4。原來移植linux3是如此容易,驅動架構基本上沒有變,可以直接從linux2.6.37上過渡,1個小時就搞定

總結一下和2.6.37內核的區別和移植過程中遇到的問題及解決辦法

1. bsp

board file都放到了arch/arm/mach-s3c24xx目錄下,把mach-xc2440.c也放到這裡

同目錄的Kconfig: 按CPU排序,所有的Board選項都集成在一個菜單下

board file中MACHINE_START將.boot_params 替換成 .atag_offset,

加了.restart = s3c244x_restart(在common.h中定義)

2. yaffs:

在struct mtd_info中的接口函數變成的以下劃線開頭的,需要把調用mtd操作函數的地方修改函數名。 如mtd->read   -->   mtd->_read

只有3個文件會報錯,yaffs_vfs.c yaffs_mtdif1.c yaffs_mtdif2.c

yaffs_vfs.c:  會提示“向只讀成員‘i_nlink’賦值”

查看inode結構體裡面有一個聯合體,i_nlink是const類型的

struct inode     union {

const unsigned int i_nlink;

unsigned int __i_nlink;

};

所以要用__i_nlink,把代碼中的i_nlink都替換了

root = d_alloc_root(inode);  提示這行的d_alloc_root函數沒有聲明

查看dache.c中這個函數已經改為了d_make_root

yaffs_mtdif1.c:  ‘MTD_OOB_AUTO’未聲明

看老版內核的mtd.h中的enum mtd_oob_mode_t沒有了

有個struct mtd_oob_ops,看上面的注釋裡有MTD_OPS_RAW

搜這個是在mtd-eabi.h定義的

enum {

MTD_OPS_PLACE_OOB = 0,

MTD_OPS_AUTO_OOB = 1,

MTD_OPS_RAW = 2,

};

所以把MTD_OOB_AUTO改成MTD_OPS_AUTO_OOB

yaffs_mtdif2.c和yaffs_mtdif1.c修改的地方一樣

XC2440上移植的驅動見這裡:http://www.linuxidc.com/Linux/2012-07/64307.htm

Copyright © Linux教程網 All Rights Reserved