龙芯2k的X86环境交叉编译

1、下载 龙芯内核交叉编译器(运行在X86_64机器上):

http://ftp.loongnix.org/toolchain/gcc/release/gcc-4.4.7-7215-n64-loongson.tar.gz
龙芯社区的信息提示用的是这个,但在我编译的过程中出现libopcodes找不到,好长的错误提示信息,这里就不列出来了。
换了如下的交叉编译器,一切OK
http://ftp.loongnix.org/toolchain/gcc/release/cross-gcc-4.9.3-n64-loongson-rc6.1.tar.bz2

注:运行交叉编译的操作系统为RHEL/centos-6系列,ubuntu-13/14/15等,某些linux发行版无法运行,请自行切换操作系统。
我的X86平台安装了Ubuntu16.04LTS。之前用中标麒麟试过,编译报错,回过头来看龙芯社区信息,发现不支持,果断放弃。
交叉编译相关信息参见:
http://www.loongnix.org/index.php/Cross-compile

将编译器解压到/opt/目录下
#tar -xf cross-gcc-4.9.3-n64-loongson-rc6.1.tar.bz2 -C /opt

2、环境变量配置:

设置环境变量配置文件:

#  cd /opt/cross-gcc-4.9.3-n64-loongson-rc6.1
#  source setenv.sh

2、内核交叉编译步骤

针对不同的开发板使用交叉编译器不相同,参考前面提到的根据时间段和开发板进行选择:

1)下载源码,进入内核源码目录,以linux-3.10为例:

# git clone git://cgit.loongnix.org/kernel/linux-3.10.git
# cd linux-3.10

2)拷贝对应的配置文件,然后进行配置,主要是读入.config中的配置信息,生成内核配置图形界面,可以根据需要手动的对kernel进行裁剪:

如果龙芯2k板卡,kernel则按照下面方式拷贝配置文件:

# cp arch/mips/configs/loongson2k1000_defconfig .config

如果编译龙芯3系列板卡,kernel则按照下面方式拷贝配置文件:

# cp arch/mips/configs/loongson3_defconfig .config

选择完毕,可以执行下面命令进行内核配置:

# make menuconfig ARCH=mips CROSS_COMPILE=mips64el-loongson-linux-  //如果执行出错,请根据出错提示,apt-get update最新的包

可能会有的错误提示:

*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
*** 
*** Install ncurses (ncurses-devel) and try again.
*** 
make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1

错误提示: 系统缺少ncurses libraries。解决办法:

# apt-get install libncurses5-dev

3、编译内核,成功后会在当前目录下生成vmlinux.32(32位)、vmlinux(64位,我们使用的是vmlinux)、System.map

# make vmlinux ARCH=mips CROSS_COMPILE=mips64el-loongson-linux-  

4、模块安装,默认会把编译的模块安装到/lib/modules/,由于我们是在x86服务器上交叉编译龙芯的kernel源码,所以建议创建一个新目录,然后将模块编译到自己指定的目录
如:/root/mymodules/lib/firmware/mts_gsm.fw

# mkdir  ~/mymodules 
# make modules_install  INSTALL_MOD_PATH=~/mymodules ARCH=mips CROSS_COMPILE=mips64el-loongson-linux-  

测试编译出来的内核
上传内核文件

对于编译出来的内核,需要使用下面的3个文件:

vmlinuz(或者vmlinux)
mymodules 目录
System.map

把这些文件都上传到龙芯机器上。

把/dev/sda1挂载到 /mnt 下,

# mount /dev/sda1 /mnt

把内核文件放置到相应目录下:

# cp vmlinuz  /mnt
 # cp System.map    /mnt/System.map-3.10.0+
 # cp mymodules/lib/* /lib -rf

修改操作系统的引导菜单

这一步非常容易出错,注意:

如果硬盘有多个分区,一定要修改第一个分区(sda1)下的boot.cfg
如果是昆仑固件,则是改grub.cfg
修改boot.cfg时,为了防止写错,一般是保留原来的所有title,复制出一个新的title进行修改。

这样即使新加的title写的不正确,仍然可以选择原来的title正常进入系统。

boot.cfg的典型内容(只改kernel一行):

title Loongnix
kernel (wd0,0)/vmlinuz
initrd (wd0,0)/initramfs-3.10.84-17.fc21.loongson.mips64el.img
args root=UUID=f8cc9919-415f-427d-8cdd-1feae1fdf55e ro rhgb quiet loglevel=0 LANG=zh_CN.UTF-8

grub.cfg也是只改linux一行。
重启机器

开机的操作系统选择菜单,选择新添加的一项
验证确实启动的是新内核:

 # uname -a

看内核的编译时间,应该是最新的时间。

你可能感兴趣的:(龙芯2k的X86环境交叉编译)