📄 44b0.txt
字号:
该文档是针对uClinux-Samsung.tar.gz解压后的可以在S3C4510B的开发板上跑的源代码修改的步骤
修改编译后可以在MICETEK的S3C44B0的开发板上运行
***********************************************************************************************
一、加入S3C44B0的在make config时的厂商/产品选项。
在uClinux-Samsung\vendors\Samsung下新建S3C44B0目录,将uClinux-Samsung\vendors\Samsung\4510B下
的内容全部复制到S3C44B0目录下。这里有几个文件较为重要:"config.linux-2.4.x"这个是linux内核编
译配置选项文件。现在针对S3C44B0我们要修改的是# System Type到# General setup之间的内容。
修改如下:
# System Type
#
# CONFIG_ARCH_DSC21 is not set
# CONFIG_ARCH_CNXT is not set
# CONFIG_ARCH_SWARM is not set
#c onfig_ARCH_SAMSUNG=y
CONFIG_ARCH_MICETEK=y
# CONFIG_ARCH_ATMEL is not set
CONFIG_NO_PGT_CACHE=y
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
CONFIG_CPU_ARM710=y
CONFIG_CPU_WITH_CACHE=y
# CONFIG_CPU_WITH_MCR_INSTRUCTION is not set
CONFIG_SERIAL_44B0=y
#c onfig_SET_MEM_SAMSUNG=y
DRAM_BASE=0x0c000000 #SDRAM起始是地址
DRAM_SIZE=0x00800000 #SDRAM大小
FLASH_MEM_BASE=0x00000000 #FLASH起始地址
FLASH_SIZE=0x00200000 #FLASH大小
#
# General setup
以后的make都以CONFIG_ARCH_S3C44B0=y这选项来解决是编译和S3C44B0相关的其他选项。
"rc",这个文件相当于DOS下的autoexec.bat这个文件。是linux下的自动批处理文件.
*********************************************************************************************************************************************
二、在linux内核加入对44B0处理器的支持。
上篇讲了如何在uClinux中加入S3C44B0的在make config时的厂商/产品选项。
这篇主要讲述如何在在uClinux的内核加入对44B0处理器的支持。
因为三星的S3C44B0X处理器无MMU。这里我们主要修改uClinux-dist\linux-2.4.x\arch\armnommu下
的config.in和Makefile。config.in是我们在make config时选择Customiae Kernel Settings(自定
义内核)时的编译项配置文件。我们还是在config.in里找有关4510的编译选项"CONFIG_ARCH_SAMSUNG":
#------------------------------------------------------------------------------
# S y s t e m
#------------------------------------------------------------------------------
mainmenu_option next_comment
comment 'System Type'
choice 'ARM system type' \
"TI-DSC21 CONFIG_ARCH_DSC21 \
Conexant CONFIG_ARCH_CNXT \
SWARM CONFIG_ARCH_SWARM \
Samsung CONFIG_ARCH_SAMSUNG \
Micetek CONFIG_ARCH_MICETEK \
Atmel CONFIG_ARCH_ATMEL" TI-DSC21
其中"Micetek CONFIG_ARCH_MICETEK \"是要加入的。
另外还有一处:
if [ "$CONFIG_ARCH_SAMSUNG" = "y" ]; then
define_bool CONFIG_NO_PGT_CACHE y
define_bool CONFIG_CPU_32 y
define_bool CONFIG_CPU_26 n
define_bool CONFIG_CPU_ARM710 y
define_bool CONFIG_CPU_WITH_CACHE y
define_bool CONFIG_CPU_WITH_MCR_INSTRUCTION n
define_bool CONFIG_SERIAL_SAMSUNG y
bool 'Set ev4510 flash/sdram size and base addr' CONFIG_SET_MEM_SAMSUNG
if [ "$CONFIG_SET_MEM_SAMSUNG" = "y" ]; then
hex 'SDRAM Base Address' DRAM_BASE 00000000
hex 'SDRAM Size ' DRAM_SIZE 00800000
hex 'FLASH Base Address ' FLASH_MEM_BASE 01000000
hex 'FLASH Size ' FLASH_SIZE 00200000
else
#if [ "$CONFIG_SET_MEM_SAMSUNG" = "n" ]; then
define_hex DRAM_BASE 00000000
define_hex DRAM_SIZE 00800000
define_hex FLASH_MEM_BASE 01000000
define_hex FLASH_SIZE 00200000
fi
fi
if [ "$CONFIG_ARCH_MICETEK" = "y" ]; then
define_bool CONFIG_NO_PGT_CACHE y
define_bool CONFIG_CPU_32 y
define_bool CONFIG_CPU_26 n
define_bool CONFIG_CPU_ARM710 y
define_bool CONFIG_CPU_WITH_CACHE y
define_bool CONFIG_CPU_WITH_MCR_INSTRUCTION n
define_bool CONFIG_SERIAL_44B0 y
define_bool CONFIG_VT y
define_hex DRAM_BASE 0x0C000000
define_hex DRAM_SIZE 0x00800000
define_hex FLASH_MEM_BASE 0x00000000
define_hex FLASH_SIZE 0x00200000
fi
其中:
if [ "$CONFIG_ARCH_MICETEK" = "y" ]; then
.
.
.
fi
也是我加入的。实际里面的值可以在make Kernel时来修改。在makefile中define_bool来
定义的一个布尔量,define_hex来定义的一个数字变量。DRAM_BASE、DRAM_SIZE定义了系统
中SDRAM的起始地址、大小,FLASH_MEM_BASE、FLASH_SIZE定义了系统中FLASH的起始地址、大小。
在Makefile里找到"CONFIG_ARCH_SAMSUNG"
ifeq ($(CONFIG_ARCH_SAMSUNG),y)
TEXTADDR = 0x00008000
MACHINE = samsung
endif
ifeq ($(CONFIG_ARCH_MICETEK),y)
TEXTADDR = 0x0C008000
MACHINE = micetek
endif
其中:
ifeq ($(CONFIG_ARCH_MICETEK),y)
.
.
endif
是我加入的。这里给出了TEXTADDR和处理器名。MACHINE必须为mach-micetek这个
目录名的"-"以后的字符。所以这里为"micetek"
**************************************************************************
三、
(1) mach-micetek目录下的arch.c文件
MACHINE_START(MICETEK, "S3C44B0")
MAINTAINER("Mac Wang")
BOOT_MEM(0x0c000000, 0x01c00000, 0x01c00000)
BOOT_PARAMS(0x0c000100)
INITIRQ(genarch_init_irq)
MACHINE_END
其中MACHINE_START(MICETEK, "S3C44B0")的"MICETEK"是在asm/mach-types.h里定义的平台类型
BOOT_MEM(0x0c000000, 0x01c00000, 0x01c00000)指定了启动的RAM地址0x0c000000,特殊功能寄存器地址0x01c00000
BOOT_PARAMS(0x0c000100) ????????????
(2) mach-micetek目录下的irq.c
把s3c4510b都改成s3c44b0
(3) mach-micetek目录下的makefile文件
把O_TARGET := samsung.o改为O_TARGET := micetek.o
*****************************************************************************************************
四、asm-armnommu/mach-types.h_ 文件
修改uClinux-dist\linux-2.4.x\include\asm-armnommu\mach-types.h??????????加入处理器号:
#define MACH_TYPE_MICETEK 61
.
.
.
#ifdef CONFIG_ARCH_SAMSUNG
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_SAMSUNG
# endif
# define machine_is_samsung() (machine_arch_type == MACH_TYPE_SAMSUNG)
#else
# define machine_is_samsung() (0)
#endif
#ifdef CONFIG_ARCH_MICETEK
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_MICETEK
# endif
# define machine_is_micetek() (machine_arch_type == MACH_TYPE_MICETEK)
#else
# define machine_is_micetek() (0)
#endif
*****************************************************************************************
五、
在uClinux-Samsung\linux-2.4.x\arch\armnommu\boot\compressed目录下是linux
对不同处理器的起动代码。我们可以看一下Makefile里的内容。我们可看到:
.
.
.
ifeq ($(CONFIG_ARCH_SA1100),y)
OBJS += head-sa1100.o setup-sa1100.o
ifeq ($(CONFIG_SA1100_NANOENGINE),y)
OBJS += hw-bse.o
endif
endif
ifeq ($(CONFIG_ARCH_MICETEK),y)
HEAD = head-micetek.o
endif
.
.
.
其中:
ifeq ($(CONFIG_ARCH_MICETEK),y)
HEAD = head-micetek.o
endif
是我已加入的有关S3C44B0的编译选项。在这目录下我已写了44B0的起动程序:head-micetek.S。
*****************************************************************************************
六、
二、在linux内核加入对44B0处理器的支持。
这篇将继续讲述如何在在uClinux的内核加入对44B0处理器的支持。在上篇中讲述在内核加入相关的编译修改。
到此我们需make config,在config时选择Customiae Kernel Settings(自定义内核)。
*
* System Type
*
ARM system type (TI-DSC21, Conexant, SWARM, Samsung, S3C44B0, Atmel) [S3C44B0]
这里是一个重要的选项。我们要选"S3C44B0"使系统在编译的时候选择对S3C44B0的ARM系统类
型支持。以下部分可用默认设置(直接回车)。最后make dep; make。uClinux for 44B0的移植基本完成了.
************************************************************************************************
七、修改波特率
(1) uClinux-Samsung\vendors\Samsung\S3C44B0\config.arch
############################################################################
#
# Vendor specific settings
#
CONSOLE_BAUD_RATE = 115200
############################################################################
(2) DRIVERS/CHAR/SERIAL-SAMSUNG.C中将serial_console_setup函数中
int baud = 19200 改为 57600
此为CONSOLE STARTUP时设置的波特率,此时用的是这个文件,到后面移植到44B0X时换为serial_44b0.c。
在makefile中定义了应用的文件
obj-$(CONFIG_SERIAL_ACPI) += acpi_serial.o
obj-$(CONFIG_SERIAL_21285) += serial_21285.o
obj-$(CONFIG_SERIAL_SA1100) += serial_sa1100.o
obj-$(CONFIG_SERIAL_CORE) += serial_core.o
obj-$(CONFIG_SERIAL_AMBA) += serial_amba.o
obj-$(CONFIG_SERIAL_CLPS711X) += serial_clps711x.o
obj-$(CONFIG_SERIAL_DSC21) += serial_dsc21.o
obj-$(CONFIG_SERIAL_ATMEL) += serial_atmel.o
obj-$(CONFIG_SERIAL_SAMSUNG) += serial_samsung.o
obj-$(CONFIG_SERIAL_44B0) += serial_44b0.o
在DRIVERS/CHAR/config.in中定义了串口支持选项
if [ "$CONFIG_ARCH_SAMSUNG" = "y" ]; then
bool 'Samsung serial port support' CONFIG_SERIAL_SAMSUNG
if [ "$CONFIG_SERIAL_SAMSUNG" = "y" ]; then
bool ' Support for console on Samsung serial port' CONFIG_SERIAL_SAMSUNG_CONSOLE
fi
fi
if [ "$CONFIG_ARCH_MICETEK" = "y" ]; then
bool 'EV44B0 serial port support' CONFIG_SERIAL_44B0
if [ "$CONFIG_SERIAL_44B0" = "y" ]; then
bool ' Support for console on Samsung serial port' CONFIG_SERIAL_SAMSUNG_CONSOLE
fi
if [ "$CONFIG_SERIAL_44B0" = "y" ]; then
bool ' Support for IRDA on Samsung serial port' CONFIG_SERIAL_SAMSUNG_IRDA
fi
*************************************************************************************************
八、????????????????是要改的吗? 与第二个修改中
ifeq ($(CONFIG_ARCH_MICETEK),y)
TEXTADDR = 0x0C008000
MACHINE = micetek
"TEXTADDR"的关系是什么?
uClinux-Samsung\linux-2.4.x\arch\armnommu\MAKEFILE
ifeq ($(CONFIG_CPU_26),y)
PROCESSOR = armo
TEXTADDR = 0x02080000
endif
ifeq ($(CONFIG_CPU_32),y)
PROCESSOR = armv
TEXTADDR = 0xC0008000
endif
***************************************************************************************************
九、ARCH/ARMNOMMU/BOOT/MAKEFILE
ZREALADDR 决定KERNEL解压后数据输出的地址,同1
ZTEXTADDR 带BOOTLOADER的压缩内核文件烧入FLASH的起始地址,即从哪个位置开始执行BOOTLOADER,
若启动时直接执行,将其设为0,若自带BIOS可以跳到你想要的地址,可改为你要的位置。
ifeq ($(CONFIG_ARCH_SAMSUNG),y)
ZRELADDR = 0x00008000
ZTEXTADDR = 0x00000000
endif
ifeq ($(CONFIG_ARCH_MICETEK),y)
ZRELADDR = 0x0C008000
ZTEXTADDR = 0x00000000
ZBSSADDR = 0x0C400000
endif
*******************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -