Linux 2.6.26 在S3C2440上的移植

来源:互联网 发布:为什么我没有淘宝客贷 编辑:程序博客网 时间:2024/05/02 02:47
我使用的板子与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,这个也比较简单,不说了
原创粉丝点击