⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 44b0.txt

📁 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 + -