红联Linux门户
Linux帮助

uclinux(2.6内核)在s3c44b0上的移植

发布时间:2006-11-27 01:05:05来源:红联作者:coolentboy
暑假里,将实验室的一台ev40的实验箱带回家,准备做些实验。
首先介绍一下与移植相关的我的实验箱的硬件信息:
cpu: Samsung 44b0x
Nor flash: SST39vf160 (1M x 16bit)
Nand flash: K9F2808
Sdram: HY57V65160B (4M x 16bit)
网络芯片: RTL8019AS

1,下载相关内核源码
uClinux-dist-20040408.tar.gz
linux-2.6.9.tar.bz2
linux-2.6.9-hsc0.patch.gz

解压源码:
tar xzvf uClinux-dist-20040408.tar.gz
tar jxvf linux-2.6.9.tar.bz2
gunzip linux-2.6.9-hsc0.patch.gz
patch -p0 < linux-2.6.9-hsc0.patch
mv linux-2.6.9 uClinux-dist
cd uClinux-dist
rm -rf linux-2.6.x
mv linux-2.6.9 linux-2.6.x

2,下载并安装交叉编译环境
arm-uclinux-tools-base-gcc3.4.0-20040713.sh

安装:
./arm-uclinux-tools-base-gcc3.4.0-20040713.sh
mv arm-uclinux-tools /usr/local
在~/.bash_profile文件中添加该编译工具的PATH

3,修改源码中与编译工具有关的文件:
修改vendor/config/armnommu/config.arch文件
MACHINE = arm
ARCH = armnommu
CROSS_COMPILE = arm-uclinux-
CROSS = $(CROSS_COMPILE)

修改linux-2.6.x目录下的Makefile文件,添加如下内容:
ARCH = armnommu
CROSS_COMPILE = arm-uclinux-

4,增加44b0x相关的目录与文件:
cd vendors/Samsung
mkdir 44b0x
将Samsung/4510B下的所有文件(config.linux-2.4.x和config.vendor-2.4.x除外)copy到44b0x目录下。
cp linux-2.6.x/arch/armnommu/configs/s3c44b0x_defconfig vendors/Samsung/44b0x/config.linux-2.6.x
修改 44b0x/rc文件,将第2行和第4行中的ram0改成ram1,根据板子情况适当修改其他行。

5,修改linux-2.6.x/arch/armnommu/boot/compressed/head-s3c44b0.S文件。(280行附近)
ldr r2, S3C44B0_PROCESSOR_TYPE
str r2, [r6]
ldr r2, S3C44B0_MACH_TYPE
str r2, [r9]
改为:
ldr r6, S3C44B0_PROCESSOR_TYPE
ldr r7, S3C44B0_MACH_TYPE

6,修改uClinux-dist/linux-2.6.x/include/asm-armnommu/system.h文件(有些板子需要更改,而我的ev40板不需要改)
将vectors_base改为(CONFIG_DRAM_BASE+0x8)
我的ev40板不用改vectors_base值,其值是CONFIG_DRAM_BASE (改了后会出现PID错误,死在PID那行)


7,增加串口驱动。内核源代码中只带了44b0的简易串口驱动。要自己编写串口驱动程序:
(1), 增加文件。(文件可参考4510的串口驱动,有需要的请与我联系)
linux-2.6.x/drivers/serial/serial_s3c44b0.c
linux-2.6.x/include/asm-armnommu/arch-s3c44b0x/uart.h
(2),修改linux-2.6.x/drivers/serial/Kconfig,添加44B0X串口相关内容
config SERIAL_S3C44B0X
bool 'S3C44B0X Serial Support'
default y
select SERIAL_CORE
help
Samsung S3C44B0X Chips has built-in serial controler
config SERIAL_S3C44B0X_CONSOLE
bool "Support for console on S3C44B0X Serial port"
depends on SERIAL_S3C44B0X=y
select SERIAL_CORE_CONSOLE
help
Allow selection of the S3C44B0X on-board serial ports for use as
an virtual console.
(3),修改linux-2.6.x/drivers/serial/Makefile,添加44B0x的相关内容:
obj-$(CONFIG_SERIAL_S3C44B0X) += serial_s3c44b0.o
(4),修改linux-2.6.x/include/linux/serial_core.h,在其中加入PORT_S3C44B0的定义:
#define PORT_S3C44B0 62
(5),修改linux-2.6.x/arch/armnommu/mach-s3c44b0x/driver中Makefile和Kconfig文件,注释掉原来与简易串口相关的内容。
(6),linux-2.6.x/drivers/serial/serial_s3c44b0.c中将有
CONFIG_SERIAL_S3C44B0_CONSOLE改为:CONFIG_SERIAL_S3C44B0X_CONSOLE
并设置波特率为正确的值。
(7)记得要根据自己板子配置serial_s3c44b0.c中的static void __s3c44b0_init(struct uart_port *port, int baud)函数中的寄存器的值。

8,增加网卡驱动。我的网络芯片用的是RTL8019AS,不出意外的话,市面上所有44B0板子上都是用的该芯片,只是有的用的是8bit,有的用的是16bit模式,驱动也要做相应的改动才行。我的是用的8bit模式。
这里只讲一下要注意的地方:网卡的中断号,中断的初始化,网卡的基址等等。
网卡驱动后,可以配置一下NFS和FTP来测试一下网络。
(1).配置内核:
进入File Systems --->Network file systems --->选项选中:
[*]NFS file system support
[*]Provide NFSv3 client support
(2).配置用户选项
进入Network Applications ---> 选项选中:
[*]portmap
进入BusyBox --->选项选中:
[*]mount
[*]mount:support NFS mounts
[*]umount
(3). 在linux主机上,配置NFS server
(1),编辑/etc/exportfs文件,添加如下内容:
/test *(rw, sync, no_root_squash)
(2),输入以下命令:
#service portmap start
#service nfs start
#exportfs -rv (重新共享/etc/exports中共享出来的目录)
#showmount -e (查看所有共享目录)
(4).编译内核,下载到开发板运行时,用如下方法进行NFS挂接
输入如下命令:
#portmap& (记住一定要运行该命令,否则NFS客户机无法找到从NFS服务器共享的目录)
#mount -t nfs 192.168.0.110:/test /mnt
#ls /mnt
完成网卡驱动后,测试ftp,出现问题:
在测试ftp时,登录进去后运行ls命令和其他命令,网络会变得很慢,bye命令后会出现错误:
skput:over: 0c01e530:80 put: dev:eth0221 Goodbye. 然后用ping命令来测试网络,网络延时会变得很长。


9,boa web server的移植。
(1),配置用户选项时,进入Network Applications ---> 选项选中:boa
进入lib选项,选中build libZ
(2),修改uClinux-dist/user/boa/src/defines.h文件,添加定义 #define SERVER_ROOT "/home/web"
(3),修改uClinux-dist/user/boa/examples/boa.conf文件
Port 80
User 0
Group 0
ServerAdmin root@localhost
DocumentRoot /home/web/html
UserDir public_html
DirectoryIndex index.html
KeepAliveMax 100
KeepAliveTimeout 10
MimeTypes /home/web/mime.types
DefaultType text/plain
ScriptAlias /cgi-bin /home/web/cgi-bin
ScriptAlias /index.html /home/web/html/index.html
以上就是boa.conf的最简单配置,其他都可屏蔽掉,有些内容不屏蔽掉会出错。
(4),修改romfs/etc/inittab文件,添加如下内容:
boa:unknown:/bin/boa -c/home/web
(5),将uClinux-dist/user/boa/examples/boa.conf和mime.types两个文件copy到romfs/home/web。
这样配置后,html文件全部放到/home/web/html文件夹里,cgi文件放到/homt/web/cgi-bin文件夹里,可以将html和cgi-bin文件夹设成nfs文件系统,这样可以马上测试编写的网页程序。(mount -t nfs 192.168.0.100:/web /home/web/html)
文章评论

共有 7 条评论

  1. wanjingming 于 2011-08-08 23:09:00发表:

    楼主是高人啊

  2. queenson 于 2011-05-11 11:54:19发表:

    你好,我也是遇到44B0串口驱动运行不起来的情况了,想借鉴下您的两个程序,不知道方不方便,谢谢。queenson1986@126.com

  3. qachenzude 于 2011-04-18 13:59:18发表:

    您好,我的板子就是s3c44b0的,请问您能把您已经编译通过,而且可以运行成功的完整源代码发到我的邮箱么?非常感谢哦!我的邮箱是qachenzude@qq.com.谢谢!

  4. babypig177 于 2008-01-15 11:08:57发表:

    你好,怎样与您联系,我想要您的两个串口驱动文件,谢谢。我的邮箱:
    yao_c@163.com

  5. 24.6.137.* 于 2007-06-08 03:30:42发表:

    Sorry. I forgot mention my email address. My email address is sujy@mac.com

  6. 24.6.137.* 于 2007-06-08 03:30:00发表:

    Can you help me with writing a serial driver.
    Thank you-
    Regards-
    Jyothi

  7. 爬行的背包 于 2007-03-27 14:07:21发表:

    你好,怎样与您联系,我想要您的两个串口驱动文件,谢谢。我的邮箱:
    guodarui@163.com