Linux内核移植问题

来源:互联网 发布:windows loader有毒吗 编辑:程序博客网 时间:2024/05/01 23:42

我用的是linux2.4.18,打好了arm补丁,使用cross2.95.3编译,配置文件选项全是默认。编译时发生:
make[3]: *** [vgacon.o] 错误 1
make[3]: Leaving directory `/home/armlinux/drivers/video'
make[2]: *** [first_rule] 错误 2
make[2]: Leaving directory `/home/armlinux/drivers/video'
make[1]: *** [_subdir_video] 错误 2
make[1]: Leaving directory `/home/armlinux/drivers'
make: *** [_dir_drivers] 错误 2
我随后去掉console drivers下的vga text console选项,又出现下列错误:
drivers/char/char.o: In function `vt_ioctl':
drivers/char/char.o(.text+0xa59): undefined reference to `key_maps'
drivers/char/char.o(.text+0xa924): undefined reference to `key_maps'
drivers/char/char.o(.text+0xa92c): undefined reference to `keymap_count'
drivers/char/char.o(.text+0xa94): undefined reference to `func_table'
drivers/char/char.o(.text+0xa950): undefined reference to `funcbufleft'
drivers/char/char.o(.text+0xa954): undefined reference to `funcbufsize'
drivers/char/char.o(.text+0xa95): undefined reference to `funcbufptr'
drivers/char/char.o(.text+0xad4c): undefined reference to `func_table'
drivers/char/char.o(.text+0xad50): undefined reference to `funcbufsize'
drivers/char/char.o(.text+0xad54): undefined reference to `funcbufptr'
drivers/char/char.o(.text+0xad5): undefined reference to `func_buf'
drivers/char/char.o(.text+0xad5c): undefined reference to `funcbufleft'
drivers/char/char.o(.text+0xad60): undefined reference to `accent_table_size'
drivers/char/char.o(.text+0xad64): undefined reference to `accent_table'
drivers/char/char.o: In function `kbd_processkeycode':
drivers/char/char.o(.text+0x14070): undefined reference to `key_maps'
drivers/char/char.o: In function `handle_diacr':
drivers/char/char.o(.text+0x1480c): undefined reference to `accent_table_size'
drivers/char/char.o(.text+0x14810): undefined reference to `accent_table'
drivers/char/char.o: In function `do_fn':
drivers/char/char.o(.text+0x14864): undefined reference to `func_table'
drivers/char/char.o: In function `compute_shiftstate':
drivers/char/char.o(.text+0x14c2): undefined reference to `key_maps'
drivers/char/char.o: In function `do_slock':
drivers/char/char.o(.text+0x14da): undefined reference to `key_maps'
make: *** [vmlinux] 错误 1

 

解决方法(一):

    网上的方法:key_maps、func_table、funcbfsize这些变量都是在defkeymap.c中定义的。不过vt.c和 keyboard.c都没有引用defkeymap.c的定义。
    在drivers/char/Makefile里检查了一下,ifeq($(ARCH),arm)下面的“KEYMAP :=”后面是空白就把defkeymap.o填上去了。然后make zImage编译通过。

 

解决方法(二):

    根据方法一可以看出,是defkeymap.c文件没有编译进内核,在drivers/char/Makefile中ifeq($(ARCH),arm)对应的代码下面有几项中有defkeymap.o,只要在make menuconfig配置中选中对应的配置变量即可。

ifeq($(ARCH),arm)
  KEYMAP     :=(可以在这里加上defkeymap.o,如方法一)
  KEYBD      :=
  ifeq ($(CONFIG_PC_KEYMAP),y)
    KEYMAP   := defkeymap.o
  endif
  ifeq ($(CONFIG_PC_KEYB),y)
    KEYBD    += pc_keyb.o
  endif
  ifeq ($(CONFIG_KMI_KEYB),y)
    KEYBD    += amba_kmi_keyb.o
  endif
  ifeq ($(CONFIG_SA1111),y)
    KEYBD    += sa1111_keyb.o
  endif
  ifeq ($(CONFIG_ARCH_EDB7211),y)
    KEYBD    += edb7211_keyb.o
  endif
  ifeq ($(CONFIG_ARCH_AUTCPU12),y)
    KEYMAP   := defkeymap.o
    KEYBD    += clps711x_keyb.o
  endif

 

    例如在配置变量CONFIG_PC_KEYMAP对应的下面有defkeymap.o,然后在配置菜单文件arch/arm/config.in中,找到CONFIG_PC_KEYMAP变量,如下:

    if [ "$CONFIG_FOOTBRIDGE_HOST" = "y" -o /
            "$CONFIG_ARCH_SHARK" = "y" -o      /
            "$CONFIG_ARCH_SA1100" = "y" -o     /
            "$CONFIG_ARCH_INTEGRATOR" = "y" -o /
            "$CONFIG_ARCH_TBOX" = "y" -o       /
            "$CONFIG_ARCH_CLPS7500" = "y" -o   /
            "$CONFIG_ARCH_P720T" = "y" -o      /
            "$CONFIG_S3C2410_SMDK" = "y" -o /
            "$CONFIG_ARCH_ANAKIN" = "y" ]; then
          define_bool CONFIG_PC_KEYMAP y
   fi
从代码可以看出,若要让defkeymap.o编译,则要让CONFIG_PC_KEYMAP为y。因为我是移植S3C2410的ARM,所以在中间加了"$CONFIG_S3C2410_SMDK" = "y" -o /

原创粉丝点击