当前位置:
文档之家› Linux内核配置移植及编译实验
Linux内核配置移植及编译实验
return platform_driver_register(&dm9k_driver); } 7.添加 YAFFS 文件系统支持 将我们提供的 YAFFS 的源代码 yaffs2.tar.gz 拷贝到 linux-2.6.24.4 的同 级目录下,解压该源码包,获得 YAFFS 源码: # pwd /root/2410-s # cp /mnt/hgfs/e/yaffs2.tar.gz ./ # tar zxvf yaffs2.tar.gz 然后进入 yaffs2 目录,运行./patch-ker.sh 给内核打上补丁: # cd yaffs2 # ./patch-ker.sh c ../linux-2.6.24.4/ 这样打好补丁以后,再做正确的配置,内核就可以支持 YAFFS 文件系统了。 8.配置和编译内核 到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译, 内核才能正常使用。 在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面: # make menuconfig (1)选择硬件系统 做如下选择: System Type --->
S3C2410 Machines ---> [*] SMDK2410/A9M2410 [ ] IPAQ H1940 [ ] Acer N30 [ ] Simtec Electronics BAST (EB2410ITX) [ ] NexVision OTOM Board [ ] AML M5900 Series [ ] Thorcom VR1000
.size = SZ_4M, }, [3] = {
.name = "User Space", .offset = 0x680000, .size = 0x1980000, }, }; 这样就把我们的 64M 的 NAND Flash 分为四个区: 第一个区从 0x00000000 到 0x00080000,大小为 0.5M 第二个区从 0x00080000 到 0x00280000,大小为 2M 第三个区从 0x00280000 到 0x00680000,大小为 4M 第四个区从 0x00680000 到 0x02000000,大小为 25.5M 5.添加 LCD 支持 我们的开发平台上配置有 640*480 的液晶屏,我们来为它加上驱动支持。 需要在 arch/arm/mach-s3c2410/mach-smdk2410.c 中添加一些内容。 # vi arch/arm/mach-s3c2410/mach-smdk2410.c 首先要包含我们的 LCD 使用的数据结构的头文件,增加如下内容: #include <asm-arm/arch-s3c2410/fb.h> #include <linux/platform_device.h> 然后添加如下内容: static struct s3c2410fb_display up2410_fb[] __initdata = { { .lcdcon5 = (1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0), .type = (3<<5), .width = 640, .height = 480, .pixclock = 39721,
&s3c_device_dm9ks, }; 另外,根据我们的经典 2410 开发板的配置,网卡驱动需要修改。由于修改 的地方比较多,这里就不详细说明了,直接给出修改后的源文件,在我们光盘的 相应 src 目录下。共两个文件:dm9000.c 和 dm9000.h。现在需要作的只是把内 核中的 drivers/net 目录下的这两个文件用我们提供的文件替换掉。 其中需要注意的是对开发板的初始化。我们的开发板上使用 BANK2 作为 DM9000 的 IO,中断使用 EINT2,因此需要配置好 BANK2 和 EINT2,实现的函数如 下(已经在我们的驱动文件中添加了,不需要手动添加): static void uptech_dm9k_init(void) {
是 arm-linux-。 3.得到.config 文件
编译内核时会依赖于源代码目录下的.config 文件。如果没有这个文件,在 make menuconfig 的时候,会默认按照 i386 的配置生成.config 文件,而这不是 我们需要的。因此我们要有自己的.config 文件。
由于我们的配置和 SMDK2410 开发板的类似,因此可以使用它的.config 文 件,只需要把它的.config 文件拷贝到源代码根目录下的.config 文件即可:
[0] = { .name = "Bootloader", .size = 0x80000, .offset = 0,
}, [1] = {
.name = "Linux Kernel", .offset = 0x80000, .size = SZ_2M, }, [2] = { .name;, .offset = 0x280000,
.xres = 640, .yres = 480, .bpp = 16, .left_margin = 40, .right_margin = 32, .hsync_len = 32, .vsync_len = 2, .upper_margin = 35, .lower_margin = 5, }, }; static struct s3c2410fb_mach_info up2410_fb_info __initdata = { .displays = up2410_fb, .num_displays = 1, .default_display = 0, .gpcup = 0xffffffff, .gpcup_mask = 0x0, .gpccon = 0xaaaaaaaa, .gpccon_mask = 0x0, .gpdup = 0xffffffff, .gpdup_mask = 0x0, .gpdcon = 0xaaaaaaaa, .gpdcon_mask = 0x0, .lpcsel = 0, }; 然后,在这个文件中找到 smdk2410_init 这个函数,在函数的末尾添加这样 一行,来对 LCD 的数据进行设置: s3c24xx_fb_set_platdata(&up2410_fb_info);
}; struct platform_device s3c_device_dm9ks = {
.name = "s3c2410-dm9ks", .id = -1, .num_resources = ARRAY_SIZE(s3c_dm9ks_resource), .resource = s3c_dm9ks_resource, }; 然后,把网卡数据加入 smdk2410_devices 数组: static struct platform_device *smdk2410_devices[] __initdata = { &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c, &s3c_device_iis,
u32 bwscon; bwscon = __raw_readl(S3C2410_BWSCON); bwscon&= ~(S3C2410_BWSCON_WS2 | S3C2410_BWSCON_ST2 | S3C2410_BWSCON_DW2_32); bwscon |= (S3C2410_BWSCON_ST2|S3C2410_BWSCON_DW2_16); __raw_writel(bwscon, S3C2410_BWSCON); __raw_writel(S3C2410_BANKCON_Tacs4|S3C2410_BANKCON_Tcos4| S3C2410_BANKCON_Tacc14|S3C2410_BANKCON_Tcoh4|S3C2410_BANKCON_Tcah4| S3C2410_BANKCON_Tacp 6| S3C2410_BANKCON_PMCnorm, S3C2410_BANKCON2); set_irq_type(IRQ_EINT2,IRQT_RISING); s3c2410_gpio_cfgpin(S3C2410_GPF2, S3C2410_GPF2_EINT2); s3c2410_gpio_pullup(S3C2410_GPF2, 0); printk(KERN_INFO "Board init for AX88796 finished!\n"); } 然后在这个文件中的 axdrv_init 函数的开头部分调用这个函数: static int __init dm9k_init_module(void) { uptech_dm_init();
实验七:Linux 内核配置移植及编译实验
实验目的:1.学习和掌握Linux编译的基本步骤; 2.通过实验掌握 Linux 的配置和编译过程。
实验设备:PC 机。 实验原理:通过文本菜单方式配置命令或 X 窗口图形界面方式配置命令,会生
成.config 文件,并且在 include/Linux/目录下生成一个用于保存配 置信息的自动配置头文件 autoconf.h,执行 make xconfig 或 make menuconfig 命令后,在出现的文本菜单或图形菜单配置窗口,即可 进行配置。配置完成后进行编译和下载测试。 实验方法: 1.获得 Linux 内核源码 我 们 的 光 盘 中 提 供 了 linux-2.6.24.4 的 内 核 源 码 , 也 可 以 从 上下载。将 linux-2.6.24.4.tar.bz2 拷贝到工作目录下,解压, 就可以得到完整的 Linux 内核源码包: # pwd /root/2410-s # cp /mnt/hgfs/e/linux-2.6.24.4.tar.bz2 ./ # tar jxvf linux-2.6.24.4.tar.bz2 # cd linux-2.6.24.4/ 2.修改 Makefile 为了交叉编译内核,需要修改内核的底层 Makefile: # vi Makefile 找到下面的两行: ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 修改成如下两行: ARCH ?= arm CROSS_COMPILE ?= arm-linux上面这样修改的意思是说我们的目标平台是 arm,使用的交叉编译器的前缀