我使用的板子与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
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)
修改flash分区(arch/arm/plat-s3c24xx/common-smdk.c)
修改ECC mode(drivers/mtd/nand/s3c2410.c)
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,这个也比较简单,不说了
开发环境:
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
- export PATH=$PATH:/usr/local/arm/arm-2008q1/bin
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)
- static void __init smdk2440_map_io(void)
- {
- s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
- s3c24xx_init_clocks(12000000);
- s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
- }
- static struct mtd_partition smdk_default_nand_part[] = {
- [0] = {
- .name = "bootloader",
- .offset = 0x00000000,
- .size = 0x00030000,
- },
- [1] = {
- .name = "kernel",
- .offset = 0x00050000,
- .size = 0x00200000,
- },
- [2] = {
- .name = "root",
- .offset = 0x00250000,
- .size = 0x03dac000,
- }
- };
- } else {
- chip->ecc.mode = NAND_ECC_NONE;
- }
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,这个也比较简单,不说了