Linux-3.3.5内核初步移植到OK6410开发板

来源:互联网 发布:mac给手机充电不停闪 编辑:程序博客网 时间:2024/04/30 20:10

注意:文中大部分内容依旧参考了网上各位大牛的经验,并根据自己实际开发环境进行了修改和验证,现将详细过程记录如下:

1    建立自己的开发板

1.1   下载并解压linux系统内核源码

tar jxvf linux-3.3.5.tar.bz2

cd linux-3.3.5

1.2   修改BSP对应的Kconfig文件

gedit arch/arm/mach-s3c64xx/Kconfig

仿照MACH_SMDK6410添加一个菜单项:

config MACH_OK6410

       bool "OK6410"

       select CPU_S3C6410

       select SAMSUNG_DEV_ADC

       select S3C_DEV_HSMMC

       select S3C_DEV_HSMMC1

       select S3C_DEV_I2C1

       select SAMSUNG_DEV_IDE

       select S3C_DEV_FB

       select S3C_DEV_RTC

       select SAMSUNG_DEV_TS

       select S3C_DEV_USB_HOST

       select S3C_DEV_USB_HSOTG

       select S3C_DEV_WDT

       select SAMSUNG_DEV_BACKLIGHT

       select SAMSUNG_DEV_KEYPAD

       select SAMSUNG_DEV_PWM

       select HAVE_S3C2410_WATCHDOG if WATCHDOG

       select S3C64XX_SETUP_SDHCI

       select S3C64XX_SETUP_I2C1

       select S3C64XX_SETUP_IDE

       select S3C64XX_SETUP_FB_24BPP

       select S3C64XX_SETUP_KEYPAD

       help

         Machine support forthe Pillar OK6410

1.3   修改内核的机器码

gedit arch/arm/tools/mach-types

参照第283行:

smdk6410             MACH_SMDK6410            SMDK6410          1626

在下面插入一行:

smdk6410             MACH_OK6410          OK6410                1626

注意:其中1626这个机器码必须和UBOOT里面的机器ID一致。

1.4   建立自己的BSP文件

cp arch/arm/mach-s3c64xx/mach-smdk6410.carch/arm/mach-s3c64xx/mach-OK6410.c

gedit arch/arm/mach-s3c64xx/mach-OK6410.c

将其中所有smdk6410替换为OK6410,但注意不要替换大写的SMDK6410

1.5   自定义开发板信息

修改MACHINE_START(OK6410, "Linux-3.3.5 OnOK6410 Board"),需要注意OK6410必须和Kconfig中的MACH-OK6410相匹配。

1.6   修改arch/arm/mach-s3c64xx下的Makfile文件

gedit arch/arm/mach-s3c64xx/Makefile

在末尾题添加一行:

obj-$(CONFIG_MACH_OK6410)       += mach-OK6410.o

1.7   修改顶层Makefile

gedit Makefile

指定CPU架构和交叉编译器类型

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

1.8   复制配置文件模板

cp arch/arm/configs/s3c6400_defconfig .config

1.9   设置编译完成后镜像文件的存放位置

gedit arch/arm/boot/Makefile

在下列位置添加如下代码

$(obj)/zImage:     $(obj)/compressed/vmlinuxFORCE

       $(callif_changed,objcopy)

       cp -f arch/arm/boot/zImage /opt/OK6410/TFTP/zImage.bin

       @echo'  Kernel: $@ is ready'

endif

1.10     小插曲-安装ncurses-devel库

apt install libncurses5-dev

1.11     裁剪、配置内核

make menuconfig

配置修改如下:

General setup --->

      (/opt/OK6410/arm-linux-gcc/4.3.3/bin/arm-linux-gcc)Cross-compiler

注:此次根据arm-linux-gcc安装目录填写

Kernel Features --->

     [*] Use the ARM EABI to compile the kernel

     [*]  Allow old ABI binaries to run with this kernel (EXPERIMENTAL)

System Type --->

      [*]OK6410 

注:此处取消对其他类型开发板的支持,包括SMDK6410

Kernel hacking --->

      Kernellow-level debugging port (Use S3C UART 0 for low-level debug)

1.12     编译并烧写内核

make

make zImage


烧录zImage到开发板后,可以看到如下信息:


注:首次编译会看到“Can'tuse 'defined(@array)' (Maybe you should just omit the defined()?) atkernel/timeconst.pl line 373.”错误,按提示修改该文件位置的内容为if (!(@val)) {后重新编译即可。

阅读全文
0 0