首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

U-Boot实现uClinux向S3C44B0的移植 02

U-Boot实现uClinux向S3C44B0的移植 02

(6) 修改硬件相关的文件,在cpu/中有S3C44B0的目录,说明U-Boot已经提供了对S3C44B0的支持,我们只是需要修改部分文件使其适合我们的目标平台,主要修改的是cpu/下start.S 和serial.c,include/configs/下的lanlan.h中关于cpu的频率、串口波特率、PLLCON寄存器、flash和 sdram的大小、基地址和网络控制芯片的基地址等内容,确定修改正确后运行make lanlan_config;make命令,编译生成的u-boot.bin就是我们需要的引导程序;

        (7) 通过JTAG将生成的u-boot.bin烧写到目标平台的0x0地址,配置Linux下的minicom或者Windows下的超级终端,注意配置的串口及串口波特率要与U-Boot中设置的一样,按复位键或上电重启目标平台后可以从minicom或超级终端看到U-Boot在系统中运行了。

        通过以上步骤,完成了U-Boot移植的主要工作。

        3.3 uClinux内核的移植

        3.3.1 uClinux-dist源码包的准备

        从uClinux的官方网站下载uclinux-dist源码包。源码包中包含了uClinux内核、uClibc库和busybox等 uClinux下的用户应用程序,本文中下载的是uClinux-dist-20041215.tar.gz,在linux系统下解压后会生成一个 uClinux-dist目录,该目录包含了编译uClinux内核需要的所有文件。在uClinux-dist目录中包含有linux-2.2.x、 linux-2.4.x、linux-.2.6.x三个子目录,就是三种版本的uClinux内核的源码,我们的目的是把uClinux-2.6.9版本移植到目标平台上,所以我们还需要从http://www.kernel.org上下载linux-2.6.9.tar.bz2,从http: //www.uClinux.org上下载linux-2.6.9-uc0.patch,从Samsung的网站http: //www.oprensrc.sec.samsung.com上下载补丁文件linux-2.6.9-uc0.hsc0.patch。在Linux系统下解压内核Linux-2.6.9.tar.bz2并打上补丁文件linux-2.6.9-uc0.patch和linux-2.6.9-uc0- hsc0.patch,将打上补丁的2.6.9内核改名为linux-2.6.x并替换在uClinux-dist包中的linux-2.6.x,完成移植前的准备工作。

        3.3.2 uClinux-dist源码的修改

        按照如下步骤添加S3C44B0的相关文件:

         # cp uClinux-dist/vendors/Samsung/4510b –r  uClinux-dist/vendors/Samsung/44b0,将源代码包中已经有的Samsung的4510b的文件复制一份并改名为44b0 ,这一过程也可以直接用鼠标完成;

        # cp linux-2.6.x/arch/armnommu/configs/s3c44b0x_defconfig

        vendors/Samsung/44b0/config.linux-2.6.x,该步骤是将s3c44b0x_defconfig文件复制到44b0目录下,该步骤同样可以复制、粘贴完成;

        虽然已经给linux-2.6.9内核打了补丁文件,但是我们依然需要对源代码进行修改才能顺理的编译通过,文件的修改如下:

        (1) 修改linux-2.6.x/arch/armnommu/arch/kernel/vmlinux.lds.S,添加以下内容:

        (.got)?Global offset table */
        romfs_start = .;
        romfs.o
        romfs_end = .;

        这样修改的目的是把romfs文件系统连接到内核映象中。

          (2) 修改linux-2.6.x/arch/armnommu/kernel/setup.c, 添加变量romfs_start,romfs_end及修改

        其设置如下:
        default_command_line
        extern int _stext, _text, _etext, _edata, _end;
        extern int romfs_start,romfs_end;
        char *from = default_command_line;
        sprintf(default_command_line, "root=/dev/ram0 initrd=0x%08lx,%ldk keepinitrd", (unsigned
        long)&romfs_start,((unsigned long)&romfs_end - (unsigned long)&romfs_start)>>10);

        (3) 修改vendors/Micetek/44b0/rc文件中 /bin/expand /etc/ramfs.img /dev/ram1;

        (4) 添加串口驱动程序,添加文件linux-2.6.x/drivers/serial/serial_s3c44b0.c和linux-2.6.x /include/asm-armnommu/arch-s3c44b0/uart.h,因为在linux-2.6.9内核中对S3C44B0的支持并不是很好,系统只是提供了一个简易的串口驱动,所以需要添加串口驱动。

返回列表