Welcome 微信登录

首页 / 操作系统 / Linux / Linux2.6.18内核S3C2410平台移植笔记

我使用的实验箱是Embest EDUKIT-III,板上资源CPU:SAMSUNG S3C2410A、FLASH:K9F5608U0(Samsung NAND 32MiB),烧录工具:embest flash programmer。因为厂家自带的是2.4的内核,目前学习开发用的基本上都是2.6内核,这两者改动还是比较大的。电话咨询过技术支持后,对方说只想在板子上跑系统的话还是比较好移植的。于是决心自己动手移植内核。不然今后的驱动编写,都没有合适的运行环境,影响进度。所以工欲善其事,必先 利其器,前期的这些准备还是很有必要的。那几天刚好Ubuntu 10.10发布,满怀期待的我升完级后,结果悲剧了,中文显示变得发虚模糊,主题颜色也极度不适,还有那个ubuntu one的ribbon,恶心了好几天后,也没改好,都怪自己手贱,用的好好的系统升什么级啊。最终重装了系统,结果依然不行,崩溃啊,以为是驱动的问题,后来发现是language里没有安装中文支持,我倒。重新配置了各种开发工具后,下面开始步入正题。   (一)首先是bootloader的移植,这里选择的是vivi-20030929(实验箱带的源码包),韩国人的产品,相比uboot比较简单,据说针对S3c2410做了设计。在网上参考了CalmArrow的vivi专题文章。victor_tlh的移植过程
  <1> 修改Makefile  <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->ARCH := arm
LINUX_INCLUDE_DIR=/usr/host/arm/2.95.3/include
CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
ARM_GCC_LIBS=/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3  LINUX_INCLUDE_DIR -- 更改为交叉编译器的include文件夹CROSS_COMPILE     -- 交叉编译器的可执行文件的路径ARM_GCC_LIBS      -- 交叉编译器的lib库文件的路径
     <2> 修改arch/s3c2410/smdk.c    这一部分主要是提供flash分区的信息。  <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->#ifdef CONFIG_S3C2410_NAND_BOOT
mtd_partition_t default_mtd_partitions[] = {
{
name: "vivi",
offset: 0,
size: 0x00020000,
//vivi size 128k
flag: 0
}, {
name: "param",
offset: 0x00020000,
size: 0x00010000,
//param size 64k
flag: 0
}, {
name: "kernel",
offset: 0x00030000,
size: 0x002d0000,
//kernel size 2m+832k
flag: 0
}, {
name: "root",
offset: 0x00300000,
size: 0x00300000,
//root size 3m
flag: MF_BONFS
}, {
name: "jffs2",
offset: 0x00600000,
size: 0x01000000,
//user size 16m
flag: MF_JFFS2
}
};
#endif并没有使用全部的flash。  将此文件中的linux_cmd[ ]改为char linux_cmd[] = "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0";noinitrd:不使用initrd文件
root=/dev/mtdblock3:代表nand flash的第4个分区,作为rootfs
init=/linuxrc:启动初始化文件位置
console=ttySAC0:控制台使用串口1这是一条传递给内核的信息,用于内核初始化。     在这个文件夹下还有一处要改就是head.s ,不然vivi启动后,蜂鸣器会叫个不停。我把代码插在了#ifdef CONFIG_S3C2410_SMDK 之后, <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->@@@@@@@@@@@@@@@@@@ Modified Start@@@@@@@@@@@@@@@@@@@@@

@ buzzer off
ldr r1, =0x56000010 @ GPBCON
ldr r2, =0x155559
str r2, [r1]
ldr r2, =0x7ff
str r2, [r1, #8]
orr r2, r2, #0x01 @ buzzer off when high voltage(PWM1)
str r2, [r1, #4]
@@@@@@@@@@@@@@@@@@ Modified End @@@@@@@@@@@@@@@@@@@@@@@@@ 修改蜂鸣器也可以在别的地方,可以参考CalmArrow的文章。   在init/version.c 中可以添加启动提示信息, const char *vivi_banner =
" ^_^ well done! Go on --> "
"VIVI version " VIVI_RELEASE " (" VIVI_COMPILE_BY "@"
VIVI_COMPILE_HOST ") (" VIVI_COMPILER ") " UTS_VERSION " ";  <3> 接下来就是 配置交叉编译vivi ,在vivi目录下生成vivi程序。#make distclean#make menuconfig#make接下来可以烧录vivi ,重启电源后通过part show 查看分区信息。  (二) 2.6.18 内核的修改编译1.修改MTD分区信息修改linux-2.6.18.3/arch/arm/mach-s3c2410/common-smdk.c 文件中的分区信息,必须与开发板上的flash分区信息一致。 <!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->static struct mtd_partition smdk_default_nand_part[] = {
[0] = {

.name = "vivi",

.size = SZ_128K,

.offset = 0,

},

[1] = {

.name = "param",

.offset = SZ_128K,

.size = SZ_64K,

},

[2] = {

.name = "kernel",

.offset = SZ_128K + SZ_64K,

.size = SZ_2M + SZ_64K * 13,

},

[3] = {

.name = "root",

.offset = SZ_1M * 3,

.size = SZ_1M * 3,

},

[4] = {

.name = "jffs2",

.offset = SZ_1M * 6,

.size = SZ_1M * 16,

}
};2.去掉nand flash 的ECC 因为内核通过bootloader把数据写入NAND Flash,而vivi的ECC校验算法和内核不同,内核的校验码由nand flash 控制器产生,所以在此禁用NAND Flash 的ECC 。所以修改 drivers/mtd/nand/s3c2410.c 搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里
修改NAND_ECC_SOFT为NAND_ECC_NONE。3.修改fs/Kconfig支持启动时挂载devfs因为2.6.12 以后的内核取消了devfs 的配置选项。缺少了它,内核找不到mtdblock设备。所以我们需要修改fs/Kconfig这个文件。 打开fs/ Kconfig文件,找到menu “Pseudo filesystem”
在其中添加:<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->config DEVFS_FS
bool “/dev file system support (OBSOLETE)”
default y

config DEVFS_MOUNT

bool “Automatically mount at boot”
default y

depends on DEVFS_FS注意:bool default 与 depends前面是Table键  4.修改Makefile文件ARCH ?=arm
CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux-5.配置内核产生.config文件
为简化配置内核文件的复杂度,先复制到arch/arm/configs/smdk2410_defconfig到内核根目录下。#cp arch/arm/configs/smdk2410_defconfig .config#make menuconfigsmdk2410_defconfig是内核源码中提供的一个s3c2410平台的配置信息,基本上是可以直接用的,也可以在这个配置的基础上加上自己需要的配置。内核配置:增删的内核配置选项如下:Loadablemodule suport--->[*]Enableloadable module suport[*]Automatickernel module loadingSystemType--->[*]S3C2410 DMA suportBootoptions --->Default kernel command string:noinitrdroot=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200mtdblock3代表第四个flash分区,为root分区Floatingpoint emulation---->[*]NWFPEmath emulation#MTD子系统的配置DeviceDrivers--->Memory Technology Devices(MTD)--->............................................[*]MTDpartitioning support[*]Commandline partition table parsing............................................[*]RAM/ROM/Flashchip drivers--><*>Detectflash chip by Common Flash Interface(CFI) prob<*>Detectnon-CFI AMD/JEDEC-compatible flash chip<*>Supportfor Intel/Sharp flash chip<*>Supportfor AMD/Fujitsu flash chip<*>Supportfor ROM chip in bus mappingNAND FlashDevice Drivers--->................................<*>NANDDevice Support<*>NANDFlash support foe S3C2410/S3C2440 SocCharacterdevices--->.............................[*]Non-standardserial port support[*]S3C2410RTC DriverFilesystems---><>Secondextended fs support #去除ext2支持Pseudofilesystems--->[*]Virtualmemory file system support(former shm fs)[*]/devfile system support(OBSOLETE)[*]Automaticallymount at boot(NEW)Miscellaneousfilesystems--->............................<*>JFFS2<*>cramfs.............................NetworkFile Systems----><*>NFSfile system support保存退出6.编译内核#make zImage