Linux 2.6.26 在S3C2440上的移植

原创 2008年09月28日 16:02:00
我使用的板子与S3C2440的公板差不多,Linux2.6.26对SMDK的板支持得比较好,改动不多,这里只对过程做一个简单的记录。

开发环境:
VMware + Ubuntu 8.10,虚拟机配置了两个网卡,一个是bridge连接,用来在虚拟机中访问互联网;一个是NAT连接用来搭samba服务器与windows共享文件。


交叉编译环境:

从网上下一个回来,也可以crosstools做一个出来。
http://www.codesourcery.com/gnu_toolchains/arm/portal/subscription?@template=lite 上面有比较新的tool chain,下载ARM GNU/Linux版本。
解压tar xvjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /usr/local/arm

添加到环境变量
vim ~/.bashrc
  1. export PATH=$PATH:/usr/local/arm/arm-2008q1/bin
log out后,新环境变量生效。
arm-none-linux-gnueabi-gcc -v可看到GCC的版本是4.2.3

S3C2440是ARMv4t的内核,所以在编译是加上-march=armv4t,详细可以参考codesourcery上的getting start文档。


内核Linux2.6.26
修改时钟频率(/arch/arm/mach-s3c2440/mach-smdk2440.c)
  1. static void __init smdk2440_map_io(void)
  2. {
  3.     s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
  4.     s3c24xx_init_clocks(12000000);
  5.     s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
  6. }
修改flash分区(arch/arm/plat-s3c24xx/common-smdk.c)
  1. static struct mtd_partition smdk_default_nand_part[] = {
  2.         [0] = { 
  3.     .name = "bootloader"
  4.     .offset = 0x00000000, 
  5.     .size = 0x00030000, 
  6.     },
  7.     [1] = { 
  8.     .name = "kernel"
  9.     .offset = 0x00050000, 
  10.     .size = 0x00200000, 
  11.     },
  12.     [2] = { 
  13.     .name = "root"
  14.     .offset = 0x00250000, 
  15.     .size = 0x03dac000, 
  16.     }
  17. };
修改ECC mode(drivers/mtd/nand/s3c2410.c)
  1.     } else {
  2.         chip->ecc.mode      = NAND_ECC_NONE;
  3.     }
make s3c2410_defconfig
make menuconfig进入菜单进行配置,这里由于使用了codesourcery的工具链,此工具链支持EABI,所以选择
Kernel Features ->
     [*]Use the ARM EABI to compile the kernel
     [*]  Allow old ABI binaries to run with this kernel

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage

            
根文件系统
这里使用了busybox 1.11.2
make menuconfig进行配置,详细过程请google
make CROSS_COMPILE=arm-none-linux-gnueabi- CFLAGS:=-march=armv4t install
可以通过PREFIX修改安装的路径,也可以在menuconfig中修改

mkdir rootfs
在文件夹rootfs下建立如下的文件结构
.
|-- bin
|-- dev
|   |-- console
|   |-- mem
|   |-- null
|   |-- pts
|   |-- random
|   |-- shm
|   `-- zero
|-- etc
|   |-- fstab
|   |-- group
|   |-- hosts
|   |-- init.d
|   |   `-- rcS
|   |-- inittab
|   |-- mdev.conf
|   |-- passwd
|   |-- profile
|   `-- shadow
|-- lib
|   `-- modules
|-- linuxrc -> bin/busybox
|-- mnt
|   |-- cramfs
|   |-- jffs2
|   |-- nfs
|   |-- usb
|   `-- yaffs
|-- proc
|-- sbin
|-- sys
|-- tmp
|-- usr
|   |-- bin
|   |-- lib
|   `-- sbin
`-- var
    |-- lib
    |-- lock
    |-- log
    |-- run
    `-- tmp

28 directories, 118 files
更改tmp文件夹权限chmod 1777 tmp

复制busybox生成的/bin /sbin linuxrc到 rootfs下
复制/usr/local/arm/arm-2008q1/arm-none-linux-gnueabi/libc/armv4t/lib的文件到rootfs/lib
复制/usr/local/arm/arm-2008q1/arm-none-linux-gnueabi/libc/armv4t/usr/bin/gdbserver 到 rootfs/bin

可以在linux commond line中指定 init=/linuxrc,实际是指向了busybox,linuxrc会读取etc文件夹下的几个文件从而去配置机器。
etc/fstab:
proc    /proc        proc    default      0           0
sysfs    /sys        sysfs    default     0           0
tmpfs    /dev/shm    tmpfs    default     0           0
devpts    /dev/pts    devpts    default   0           0
设备    mount point  类型      挂载选项    dump选项 fsck选项


etc/hosts
#Do not remove the following line, or various programs
#that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost

etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::respawn:/bin/sh

etc/passwd
root::0:0:root:/root:/bin/sh

etc/profile
#set library path
export LD_LIBRARY_PATH=/lib:/usr/lib

#set user path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH'

USER="root"
LOGNAME=$USER
HOSTNAME=`/bin/hostname`
#HOSTNAME="eric"

mdev.conf内容为空,以后再添加内容
group内容可以从PC中复制一份

etc/init.d/rcS
#!/bin/sh
#/bin/mount -t sysfs sysfs /sys
#/bin/mount -t proc proc /proc
#/bin/mount -t tmpfs tmpfs /dev/shm
#/bin/mount -t devpts devpts /dev/pts


echo "######starting mdev#########"
/bin/mount -t tmpfs mdev /dev
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
ifconfig eth0 192.168.1.3

生成cramfs,mkfs.cramfs rootfs cramfs.bin
烧写到板上,开机OK。

NFS,这个网上google一下就一堆了
gdb,在根文件系统中已经安装了gdbserver,这个也比较简单,不说了

U-boot在S3C2440上的移植详解(六)

一、移植环境 主  机:VMWare--Fedora 9开发板:Mini2440--64MB Nand,Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2.tgzu-b...
  • special00
  • special00
  • 2016年04月08日 12:36
  • 854

Linux 2.6内核在S3C2440平台上移植

此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:http://ww...
  • xdw1985829
  • xdw1985829
  • 2011年08月13日 18:12
  • 3330

U-boot在S3C2440上的移植详解

U-boot在S3C2440上的移植详解 http://www.embeddedlinux.org.cn/html/jishuzixun/201303/16-2499.html 一、移植环境 ·...
  • zsjalive
  • zsjalive
  • 2014年07月21日 14:41
  • 948

RTEMS在S3C2440上的移植-(1)

经过反复的权衡,还是考虑在
  • OurRtems
  • OurRtems
  • 2014年07月22日 16:13
  • 1093

U-Boot-2010-03在S3C2440上的移植

四、自动识别启动模式Nand Or Nor Notes:1)上文连接 UBOOT-2010-03在S3C2440上的移植------------硬件初始化 http://www.linuxi...
  • u012865796
  • u012865796
  • 2014年07月09日 22:42
  • 786

S3C2440的U-Boot移植

按照视频教程,直接使用老大(韦东山老师)提供的补丁文件,直接对下载的u-boot源码打补丁,然后make 100ask24x0_config,就可以编译成功,编译下载就可以在开发板Jz2440上实...
  • special00
  • special00
  • 2016年04月08日 12:40
  • 1434

移植、裁减及配置Linux内核到s3c2440开发板

一、准备工作(使用tar xjvf命令解压linux-2.6.22.6.tar.bz2后,cd /work/system/linux-2.6.22.6) 1、修改顶层Makefile的185和1...
  • hushup
  • hushup
  • 2014年03月25日 14:38
  • 1935

RTEMS 的 AT91SAM9260 移植(9):Hello World

内核编译成功后,下一步我们就开始弄Hello World,完成这个工作,首先我们去官方网站下载测试程序包。http://www.rtems.org/ftp/pub/rtems/4.9.4/class-...
  • coolbacon
  • coolbacon
  • 2010年12月28日 08:55
  • 4348

uboot在2440上移植(一) - xgc94418297的日志 - 网易博客

     以前一直在用vivi,很精简很方便,源码很好懂,想改什么就改什么,但是功能差了点,所以移植个uboot来跑跑,uboot很好很强大,但是想搞清它的机制有点困难,先移植个最简单的试试,还没有增...
  • johnmcu
  • johnmcu
  • 2011年06月22日 15:51
  • 11509

Struts2对依赖注入的支持

依赖注入(Dependency Injection)还有一个名字,即控制反转(Inversion of Control ,IoC)什么是控制反转?控制反转就是由容器控制对象之间的关系,而非传统实现中,...
  • gengkunpeng
  • gengkunpeng
  • 2010年11月03日 13:31
  • 1281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux 2.6.26 在S3C2440上的移植
举报原因:
原因补充:

(最多只允许输入30个字)