linux-2.6.32.2移植mini2440-128M

1. www.kernel.org下載內核代碼,修改構架和編譯器

2. 修改時鐘頻率,mini2440開發板用的是12M晶振,修改arch/arm/mach-s3c2440/mach-smdk2440.c

把下面代碼中的16934400改爲12000000,如果不改串口會出現亂碼

static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}

3. 修改mini2440的lcd配置,有兩個地方要修改,第一是修改LCD屏幕的參數,第二是修改fbi

修改LCD屏幕參數,mini2440使用的是3.5寸的屏幕,在arch/arm/mach-s3c2440/mach-smdk2440.c中,寫入

  • 3.1 修改LCD參數結構。

#define LCD_WIDTH 240
#define LCD_HEIGHT 320
#define LCD_PIXCLOCK 170000

#define LCD_RIGHT_MARGIN 25
#define LCD_LEFT_MARGIN 0
#define LCD_HSYNC_LEN 4

#define LCD_UPPER_MARGIN 1
#define LCD_LOWER_MARGIN 4
#define LCD_VSYNC_LEN 1

修改lcd參數結構爲:

static struct s3c2410fb_display mini2440_lcd_cfg __initdata = {

#if !defined (LCD_CON5)
.lcdcon5    = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
#else
.lcdcon5    = LCD_CON5,
#endif

.type        = S3C2410_LCDCON1_TFT,

.width        = LCD_WIDTH,
.height        = LCD_HEIGHT,

.pixclock    = LCD_PIXCLOCK,
.xres        = LCD_WIDTH,
.yres        = LCD_HEIGHT,
.bpp        = 16,
.left_margin    = LCD_LEFT_MARGIN + 1,
.right_margin    = LCD_RIGHT_MARGIN + 1,
.hsync_len    = LCD_HSYNC_LEN + 1,
.upper_margin    = LCD_UPPER_MARGIN + 1,
.lower_margin    = LCD_LOWER_MARGIN + 1,
.vsync_len    = LCD_VSYNC_LEN + 1,
};

  • 3.2 修改fbi

static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
.displays    = &smdk2440_lcd_cfg,
.num_displays    = 1,
.default_display = 0,

.gpccon =       0xaa955699,
.gpccon_mask =  0xffc003cc,
.gpcup =        0×0000ffff,
.gpcup_mask =   0xffffffff,

.gpdcon =       0xaa95aaa1,
.gpdcon_mask =  0xffc0fff0,
.gpdup =        0×0000faff,
.gpdup_mask =   0xffffffff,

.lpcsel        = 0xf82,
};

4. 修改nand分區表,修改arch/arm/plat-s3c24xx/common-smdk.c,這個根據自己的情況來寫,照抄是沒用滴。

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name    = “bootloader”,
.size    = 0×00060000,
.offset    = 0,
},
[1] = {
.name    = “kernel”,
.offset = 0×00060000,
.size    = 0×00200000,
},
[2] = {
.name    = “root”,
.offset = 0×00260000,
.size    = 0×3fd80000,
}
};

5. 修改machine ID,修改arch/arm/tools/mach-types,填寫自己的machine ID

s3c2440            ARCH_S3C2440        S3C2440            1999

6. 給內核打yaffs文件系統的補丁。去http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/下載GNU tarball,解壓後進入yaffs2目錄,給內核打補丁

./patch-ker.sh c ~/kernel/linux-2.6.32

補丁打好後,在內核代碼目錄下的fs目錄新增了yaffs2目錄和相關配置文件

7. 因爲2410和2440很多地方是一樣的,可以用2410的配置文件爲基礎來配置內核。在內核代碼主目錄下執行:

make s3c2410_defconfig

這個命令其實就是把arch/arm/configs/s3c2410_defconfig文件拷貝過來命名爲.config,所以也可以自己cp。其實在2.6.31版內核中就已經加入了對mini2440開發板的支持,但是我沒有選。

配置內核這裏沒有什麼好說的,按照自己的需求來配置。

注意兩個問題:

(1)編譯後的鏡像大小不要超過分區配額

(2)不要裁剪太狠了,把一些基本支持都去掉了,這樣一些設備就用不了啦

 

另外,增加devfs文件管理器的支持
我們所用的文件系統使用的是devfs文件管理器。修改fs/Kconfig,
找到

menu "Pseudo filesystems"

添加如下語句:

config DEVFS_FS
  bool "/dev file system support (OBSOLETE)"
  default y  
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS

發佈了6 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章