免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5423 | 回复: 10
打印 上一主题 下一主题

----------------> 求助,lINUX 移植到 MIPS [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-01 11:35 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
2 [报告]
发表于 2007-12-02 18:16 |只看该作者
呵呵,关注中……借个地方

我也正在了解和学习把LINUX移植到 MIPS 中,我现在只有CPU是BCM4704的路由板一块,不知哪位大侠有此CPU的资料?

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
3 [报告]
发表于 2007-12-02 21:53 |只看该作者
快速建立学习ARM/MIPS和Kernel 的环境的工具 - Noki 0.2 已经发布


Noki 0.2 已经正式发布.Noki 0.2已经完全的支持了以下的特性

    * ARM/MIPS/X86 的全套交叉编译器
    * ARM/MIPS/X86 的全套系统级别的Linux 模拟
    * 全面支持以C/汇编级别调试模拟器中运行的ARM/MIPS/X86 Linux Kernel (可以暂停以及单步调试)
    * ARM/X86 支持动态连接的应用层程序的模拟运行,MIPS支持静态编译的应用层程序的模拟运行
    * 模拟使用的Linux Kernel 全部升级为2.6.20.2

欢迎您使用Noki, 希望您能够关注Noki 项目。

如果您需要下载
http://www.hotnoki.com/download.php
关于使用的文档,请点击这里
http://www.hotnoki.com/node.php?id=20


-----------------------------------------------------------------------------------------------------------------------
Noki是我们自己开发一个构建嵌入系统开发工具的脚本,可鞥帮助初学Kernel, 和ARm的人快速建立一个开发学习的环境,
1。帮助你建立一个交叉编译环境 (ARM, MIPS)
2. 帮助你建立一个模拟硬件的纯软件环境(ARM)
3. 帮助你能够是用GDB 调试Kernel , 进行C/ASM级别的单步调试(ARM)

才开始作, 还有很多缺陷, 希望能够多多捧场

网址:http://www.hotnoki.com/
使用手册: http://www.hotnoki.com/node.php?id=11

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
4 [报告]
发表于 2007-12-02 21:54 |只看该作者
Noki version 0.2的使用手册
1. 简介
Noki 是一套提供建立Embedded Linux 的开发环境的安装系统, Version 0.2 是一个正在发展的版本。


1.1. 功能

Noki 0.2 提供以下的功能:

ARM/MIPS/X86 GNU Toolchain(GCC, BINUTILS , Glibc)
交叉编译器

ARM/MIPS/X86 GDB (Insight)
用来调试Linux kernel

ARM/MIPS/X86 emulation (Qemu)
用来模拟运行不同的架构

ARM/MIPS/X86 kernel

为在模拟器运行,所配置的Linux Kernel

ARM/MIPS/X86 rootfs (initrd image)
提供一个小型的文件根系统

您可以用Noki 0.2做以下的工作:

编译c/c++程序for ARM/MIPS/X86
在虚拟机里面运行你的ARM/MIPS/X86程序
用来Kernel 的学习,HotNoki 提供一套可以对Kernel 的c/汇编级别的调试功能(ARM/MIPS/X86).并且你完全不用影响你的宿主主机,也不需要添加任何硬件设备,例如调试器,开发板。

1.2. 环境

Noki 0.2的运行环境包含。

硬件
PC Linux
OS

IA32 Linux System
软件

Python
wget
compile environment (gcc, glibc etc)

SDL Development Library
硬盘空间

3.5G 硬盘剩余空间
我们无法在短期内对所有的平台测试,下列列表是我们或者一些热心的用户测试的结果, 如果您使用非下列列表中的系统并且安装成功,欢迎您告诉我您的结果(PianoPan AT Gmail DOT com)


Gentoo ----- 完全测试

RHAS 4 红帽子企业版 -- 完全测试

FC6 ---- 仅仅测试了安装 交叉编译器

RedFlag 5.1 ---- 完全测试, 但是有一点小小的问题, 需要在咱装前 运行unset LD_LIBRARY_PATH
Redhat 9 --- 完全测试, 但是需要升级Textinfo 这个包

Ubentoo ---- 完全测试,需要在安装前,保证上面所要求的软件包已经安装
1.3. 已知的问题
Noki现在还在发展中, 0.2稳定性还不是很高 ,并且以下比较明显的问题, 这些问题预计会在接下来的版本中修正:

安装只能是一次性的,不可中断的。如果中断, 最好删除临时目录,还有安装目录里面的内容,重新开始安装
代码不能自动在安装的时候下载,必须在安装前下载好。
不清理环境, 安装完成以后, 所有临时的路径里面的文件并不删除, 为了节省空间,您需要自己手工删除临时目录里面的文件(3G左右)
用户编译的MIPS 程序,如果想在虚拟机里面运行,必须静态编译.MIPS的INITRD文件支持大大小有限,所以我们暂时没有办法把动态库复制进去。
1.4. 软件包
Noki 0.2使用了如下的软件包

GCC
Binutils
Glibc
Linux kernel
insight
qemu
busybox

1.5. 感谢
Noki 仅仅只是一个自动编译和环境配置的脚本, 主要是集成其他优秀的Open Source 项目产品, 所以我们必须感谢以下的项目:

LinuxKernel
GCC
Binutils
Glibc
Qemu
GDB & Insight(Redhat)
CLFS
busybox

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
5 [报告]
发表于 2007-12-02 21:55 |只看该作者
2. 安装
首先,请到www.hotnoki.com 上取得Noki 0.2 软件包 。文件名为 noki.0.2.tar.gz。

首先在安装之前,请解压这个压缩包。


tar zxvf noki.0.2.tar.gz
2.1. 获取源代码
在安装之前,您需要获取所有环境建立所必须的源代码。 这些源代码包含以下软件包:

GCC
binutils
Glibc
Linux Kernel
Qemu
Insight
BusyBox

所以再执行Noki 之前,您需要下载这些软件源代码包和相关的patch。您有两种方式获取这些源代码



第一种:自动下载

Noki 提供了自动下载这些源代码的脚本, 你可以依照下面的方式 自动下载软件包

#进入Noki 的目录
cd (Noki Directory)
#执行下载脚本
./noki-getsrc
执行后, Noki 将自动的从网络下载相应的源代码。请保证你的机器能够访问互联网。 整个时间跟据网络速度大概20分钟到2个小时(根据网络速度而定)。

第二种:手工下载

自动下载的工作其实是把相应的源代码包下载到(Noki Directory)/src, 所以您也可以使用其他工具,自己下载这些代码, 然后手工的放置到(Noki Directory )/src 的目录下。

下面是所有代码的下载连接

http://cross-lfs.org/files/packa ... anch_update-2.patch
http://cross-lfs.org/files/packa ... -2.17-posix-1.patch
http://cross-lfs.org/files/packa ... nutils-2.17.tar.bz2
http://cross-lfs.org/files/packa ... 1/glibc-2.5.tar.bz2
http://cross-lfs.org/files/packa ... c-ports-2.5.tar.bz2
http://cross-lfs.org/files/packa ... 5-libgcc_eh-2.patch
http://cross-lfs.org/files/packa ... ef_segfault-1.patch
http://cross-lfs.org/files/packa ... cross_hacks-2.patch
http://cross-lfs.org/files/packa ... anch_update-3.patch
http://svn.cross-lfs.org/svn/rep ... 5-libgcc_eh-1.patch
http://svn.cross-lfs.org/svn/rep ... -mips_fixes-1.patch
http://www.kernel.org/pub/linux/ ... ux-2.6.20.2.tar.bz2
http://www.hotnoki.com/package/v0.2/linux-2.6.20.2.arm.config
http://www.hotnoki.com/package/v0.2/linux-2.6.20.2.mips.config
http://www.hotnoki.com/package/v0.2/linux-2.6.20.2.mipsel.config
http://www.hotnoki.com/package/v0.2/linux-2.6.20.2.i486.config
http://gcc-uk.internet.bs/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2
http://www.hotnoki.com/package/v0.2/gcc-4.1.2-posix-1.patch
http://www.hotnoki.com/package/v ... earch_paths-1.patch
http://www.hotnoki.com/package/v0.2/gcc-4.1.2-PR20425-1.patch
http://www.hotnoki.com/package/v0.2/gcc-4.1.2-specs-1.patch
http://busybox.net/downloads/busybox-1.5.0.tar.bz2
http://www.hotnoki.com/package/v0.2/busybox-1.5.0.config
http://www.hotnoki.com/package/v0.2/busybox-1.5.0.config.mips
ftp://sourceware.org/pub/insight/releases/insight-6.6.tar.bz2',
http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz
2.2 安装配置
Noki 0.2的配置文件在(Noki Directory )/config 下面, 包含一下8个文件,分别代表不同的平台的环境建立的配置文件。

config_arm_toolchain.xml 用来构建ARM 的Toolchain.仅仅安装ARM的交叉编译器。
config_arm.xml  用来构建ARM 的Toolchain 和模拟调试环境
config_mipsel_toolchain.xml  用来构建MIPS小端的Toolchain.仅仅安装MIPS小端的交叉编译器。
config_mipsel.xml  用来构建MIPS小端 的Toolchain 和模拟调试环境
config_mips_toolchain.xml 用来构建MIPS大端 的Toolchain.仅仅安装MIPS大端端的交叉编译器。
config_mips.xml 用来构建MIPS大端的Toolchain 和模拟调试环境
config_i486_toolchain.xml 用来构建IA32的Toolchain.仅仅安装IA32的交叉编译器。
config_i486.xml 用来构建IA32的Toolchain 和模拟调试环境

在构筑不同的环境,您需要使用相应的配置文件。 并且修改相应的参数以适合自己的编译环境。

每个配置文件都是xml 格式的, 其中的个别字段需要根据您自己的需求进行修改 ,下面是一个配置文件的例子

<?xml version="1.0"?><config>    <buildconfig>        <cpu>arm</cpu>        <machine>unknown</machine>        <os>linux</os>        <host>i686-cross-linux-gnu</host>        <srcpath>./src/</srcpath>        <releasepath>/opt/noki/</releasepath>        <tmppath>/tmp/noki/</tmppath>        <oldgcc>gcc-3.4.6</oldgcc>    </buildconfig>    <package>        <PKT>            <name>sdkinitrd</name>        </PKT>        <PKT>            <name>sdkqemu</name>        </PKT>        <PKT>            <name>sdkinsight</name>        </PKT>        <PKT>            <name>sdkkernel</name>        </PKT>        <PKT>            <name>crosstoolchain</name>        </PKT>    </package></config>  请参考下面的表格,对相应的字段进行修改(其他字段请不要修改,Noki 的健壮度现在还不足以处理不同的配置文件)件。

config/buildconfig/srcpath 源代码所在的路径,一般最好不要修改
config/buildconfig/releasepath  安装目录, 你准备把Noki 安装到的目录
config/buildconfig/tmppath  临时目录,用来在安装过程中,临时文件的路径
config/buildconfig/oldgcc  用于initrd 制作
老 板本gcc的名称, 如果您要安装ARM 模拟环境, Qemu 的编译需要一个低于4.0 版本的GCC, 如果您的系统的GCC 是低于4.0的话,您可以删除这个字段,如果缺省的不符合要求,首先请您安装低版本GCC然后修改这个字段,让他等于您的低版本GCC 的命令路径。下面是一些例子.
* /opt/gcc/3.4.6/bin/gcc
* gcc-3.4.6  

经过修改, 保存您的配置文件,就可以用来安装整个开发环境。

2.3. 安装
安装Noki 的过程很简单,您只需要运行一个命令,所有的编译工作, 将全部自动运行 。(如果您的Linux 系统版本过低,请您最好先升级您的Textinfo 到最新的版本)


#进入Noki 的目录
cd (Noki Directory)
#运行noki-build ,后面带一个参数, 指定配置文件的路径。
./noki-build config/config_arm.xml
整个过程将大概持续1个小时(根据不同的硬件有所不同)

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
6 [报告]
发表于 2007-12-02 21:57 |只看该作者
3. 使用
当您安装完了Noki,就可以不再需要哪些安装程序了。您可以删除配置文件里面所指定的临时路径里面所有的文件。 例如用下面的命令清除临时文件

rm /tmp/noki/ -rf
在您所指定的安装路径里面, 便是您安装以后的Noki 系统, 不同的文件名代表不同的架构, 下面是可能出现的目录:

arm-unknown-linux
mips-unknow-linux
mipsel-unknown-linux
i486-unknown-linux
3.1. 目录结构
在每一个架构的目录里面,包含了两个子目录

sdktool: 包含交叉编译环境, 包含其他相应的开发工具
bin: 所有可执行程序
linux-2.6.20.2: Linux Kernel 文件,用于模拟器的所有用的kernel image
sdkrootfs:模拟器所是用的跟文件系统。
sysroot: 保存包含库等文件

3.2. 编译
在您是用编译器时候,请将交叉编译器的目录放到环境变量PATH里面, 下面是一个例子:


#For ARM
export PATH=$PATH:/opt/noki/arm-unknown-linux/sdktool/bin/
#For MIPSEL
export PATH=$PATH:/opt/noki/mipsel-unknown-linux/sdktool/bin/
#For MIPS
export PATH=$PATH:/opt/noki/mips-unknown-linux/sdktool/bin/
#For IA32
export PATH=$PATH:/opt/noki/i486-unknown-linux/sdktool/bin/
下来您就可以直接是用这个交叉编译器工具了。

#For ARM
arm-unknown-linux-gcc hello.c
#For X86
i486-unknown-linux-gcc hello.c
#For mips
mipsel-unknown-linux-gcc hello.c
#For mipsel
mips-unknown-linux-gcc hello.c
3.3. 在模拟器里面运行
当您想测试您编译的程序,您可以使用Noki包含的Qemu提供的模拟方案。但是Ver0.12有一定的局限性,请注意以下的内容

MIPS(包含大小端)可执行程序必须是静态编译的,当前此架构不支持动态连接。
可执行程序只能 是用Glibc ,其他的库,当前还不支持

关于模拟的方法,清参考下面的例子如何模拟运行一个hello world 程序

第一步:静态编译程序

#For ARM
arm-unknown-linux-gcc hello.c
#For X86
i486-unknown-linux-gcc hello.c
#For MIPS 必须静态编译
mips-unknown-linux-gcc hello.c -static
#For MIPSEL 必须静态编译
mipsel-unknown-linux-gcc hello.c -static
第二步:复制可执行程序到跟文件系统目录

# 请根据不同的架构更换目标路径的路径名
cp a.out /opt/noki/arm-unknown-linux/sdktool/sdkrootfs/
第三步:进入SDK工具的目录

# 请根据不同的架构更换目标路径的路径名
cd /opt/noki/arm-unknown-linux/sdktool/
第四步:是用Noki提供的命令,重新制作文件系统的Image
./noki-build-initrd
第五步:启动模拟环境,请保证在X系统下,(

# For ARM
/opt/noki/arm-unknown-linux/sdktool/bin/qemu-system-arm -kernel /opt/noki/arm-unknown-linux/sdktool/linux-2.6.20.2/arch/arm/boot/zImage -initrd /opt/noki/arm-unknown-linux/sdktool/image.gz
# For X86
/opt/noki/i486-unknown-linux/sdktool/bin/qemu -kernel /opt/noki/i486-unknown-linux/sdktool/linux-2.6.20.2/arch/i386/boot/bzImage -initrd /opt/noki/i486-unknown-linux/sdktool/image.gz -hda /opt/noki/i486-unknown-linux/sdktool/hda.img
# For MIPS
/opt/noki/mips-unknown-linux/sdktool/bin/qemu-system-mips -kernel /opt/noki/mips-unknown-linux/sdktool/linux-2.6.20.2/vmlinux -initrd /opt/noki/mips-unknown-linux/sdktool/image.gz -append "console=ttyS0"
# For ARM
/opt/noki/mips-unknown-linux/sdktool/bin/qemu-system-mips -kernel /opt/noki/mips-unknown-linux/sdktool/linux-2.6.20.2/vmlinux -initrd /opt/noki/mips-unknown-linux/sdktool/image.gz -append "console=ttyS0"
第六步:当Qemu 启动以后, 在Qemu 里面敲任意键, 进入模拟环境的Shell 里面,然后切换当前目录到根目录,并且执行你的可执行程序
#请注意,因为MIPS (包含大小端) 的系统模拟,中断将启动在串口上,清在Qemu里面使用Ctrl+Alt +3 切换到串口上
cd /
./a.out



如果您经过一段时间使用,模拟环境的根文件系统里面会有很多垃圾, 您可以使用一下的命令恢复到最初的根文件系统.

# 请根据不同的架构更换目标路径的路径名
cd /opt/noki/arm-unknown-linux/sdktool/
./noki-restore-initrd
3.4. 调试Linux Kernel
在使用 模拟环境的来调试kernel 之前, 我们现来认识一下Noki 提供的Linux Kernel for ARM. 在SDK的工具目录里面, Noki 安装了一个模拟环境需要用的Linux Kernel 源代码。 路径的例子如下:

# 请根据不同的架构更换目标路径的路径名
/opt/noki/arm-unknown-linux/sdktool/linux-2.6.20.2
并且,缺省的配置文件已经是设定好的用来在Qemu 里面运行的IntergratorCP 的ARM架构Linux Kernel , 并且进行了初始的编译,也就是说,如果您不需要修改Kernel ,那么里面已经包含了要使用的Image文件。如果您修改了这个Kernel 请使用了如下的方法进行重新编译(我们不能保证您的修改后,还可以在模拟环境里面运行)

#For ARM
make ARCH=arm CROSS_COMPILE=/opt/noki/arm-unknown-linux/sdktool/bin/arm-unknown-linux-
#For X86
make ARCH=i468 CROSS_COMPILE=/opt/noki/i486-unknown-linux/sdktool/bin/i486-unknown-linux-
#For MIPS
make ARCH=mips CROSS_COMPILE=/opt/noki/mips-unknown-linux/sdktool/bin/mips-unknown-linux-
#For MIPSEL
make ARCH=mips CROSS_COMPILE=/opt/noki/mipsel-unknown-linux/sdktool/bin/mipsel-unknown-linux-
如果您修改以后想把此kernel 恢复到安装时候的状态,请是用一下的命令来恢复整个Kernel 源代码:

# 请根据不同的架构更换目标路径的路径名
cd /opt/noki/arm-unknown-linux/sdktool/
./noki-restore-kernel
接下来我们将介绍如何用整个环境进行对Kernel 的调试。

第一步: 启动模拟环境,注意-p 后面带的是端口的号码,请务必记住这个端口
# For ARM
/opt/noki/arm-unknown-linux/sdktool/bin/qemu-system-arm -s -S -p 1122 -kernel /opt/noki/arm-unknown-linux/sdktool/linux-2.6.20.2/arch/arm/boot/zImage -initrd /opt/noki/arm-unknown-linux/sdktool/image.gz
# For X86
/opt/noki/i486-unknown-linux/sdktool/bin/qemu -s -S -p 1122 -kernel /opt/noki/i486-unknown-linux/sdktool/linux-2.6.20.2/arch/i386/boot/bzImage -initrd /opt/noki/i486-unknown-linux/sdktool/image.gz -hda /opt/noki/i486-unknown-linux/sdktool/hda.img
# For MIPSEL
/opt/noki/mips-unknown-linux/sdktool/bin/qemu-system-mips -s -S -p 1122 -kernel /opt/noki/mips-unknown-linux/sdktool/linux-2.6.20.2/vmlinux -initrd /opt/noki/mips-unknown-linux/sdktool/image.gz -append "console=ttyS0"
# For MIPS
/opt/noki/mips-unknown-linux/sdktool/bin/qemu-system-mips -s -S -p 1122 -kernel /opt/noki/mips-unknown-linux/sdktool/linux-2.6.20.2/vmlinux -initrd /opt/noki/mips-unknown-linux/sdktool/image.gz -append "console=ttyS0"
第二步:启动调式环境
# For ARM
/opt/noki/arm-unknown-linux/sdktool/bin/arm-elf-insight
/opt/noki/i486-unknown-linux/sdktool/bin/insight
# For MIPS
/opt/noki/mips-unknown-linux/sdktool/bin/mips-elf-insight
# For MIPSEL
/opt/noki/mipsel-unknown-linux/sdktool/bin/mipsel-elf-insight
第三步:在insight 里面载入kernel 目标文件vmlinux,请执行 File/open,读取/opt/noki/arm-unknown-linux/sdktool/linux-2.6.17/vmlinux



第四步:启动调试环境的终端,然后在中断连接模拟环境 ,执行一下命令,注意,ip地址后面是您启动模拟环境时指定的端口号。
target remote 127.0.0.1:1122


第五步:您可以在调试终端里面执行下列命令,开始调试kernel(注意,此步仅仅是实例,并不一定要这么作,关于调试的用法,请参考GDB的使用方法)
b start_kernel
c

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
7 [报告]
发表于 2007-12-02 21:57 |只看该作者
呵呵,原来找到的,希望这些对你有用处。

论坛徽章:
0
8 [报告]
发表于 2007-12-03 08:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
9 [报告]
发表于 2007-12-03 16:54 |只看该作者
是呀,最好是自己搭建个交叉编译环境,网上有一大把,本站也有大侠发过,我看过这类文章,你搜索一下。

论坛徽章:
0
10 [报告]
发表于 2007-12-04 09:52 |只看该作者
试下用gnu直接编译出交叉编译器.然后用vmware玩一下.不然就搞块板子,用你的交叉编译器编个内核搞进去.我以前经常搞.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP