`

Cubieboard arm-linux 移植

 
阅读更多

Cubieboard arm-linux 移植

1、u-boot 移植

获取Cubieboard的u-boot源代码

git clone https://github.com/linux-sunxi/u-boot-sunxi.git --depth=1

编译u-boot,得到 u-boot 、spl/sunxi-spl.bin
在 board/allwinner/ 目录下有该芯片对应的不同配置,我们使用的是cubieboard

make cubieboard CROSS_COMPILE=arm-linux-gnueabihf-

2、script.bin 编译

这个文件对A10芯片进行配置的二进制文件,好像是内核启动后读取的,但是不清楚具体实现是怎么做到的。

下载sunxi-tools源码,编译

git clone https://github.com/linux-sunxi/sunxi-tools.git --depth=1
cd sunxi-tools
make

得到 fex2bin 文件,这个是能把 *.fex 文件生成 *.bin文件。

下载sunxi-boards源码,得到cubieboard对于的fex文件

git clone https://github.com/linux-sunxi/sunxi-boards.git --depth=1
cd sunxi-boards

在 sys_config/a10 目录下,我们能找到 cubieboard_1gb.fex 文件,这就是我们需要的
编译,得到 script.bin

fex2bin cubieboard_1gb.fex script.bin

3、制作可启动的SD卡

参考自:
[wiki]:http://linux-sunxi.org/Bootable_SD_card
[wiki]:http://linux-sunxi.org/FirstSteps

allwinner A10 芯片上电启动的时候,会读取SD卡最前面的 1M 内容,从得到 bootloader,
所以我们需要把 u-boot 、spl/sunxi-spl.bin 写到SD卡的前1M区间。

假设在host上,我们的sd卡是 /dev/sdb

  • 对SD卡进行分区处理

    dd if=/dev/zero of=/dev/sdb bs=1M count=1       # 把SD卡前1M的区域填充为0,预留给 u-boot 和 spl/sunxi-spl.bin
    
    sfdisk -R /dev/sdb                              # 重新读取/dev/sdb,因为我们已经改变了sdb
    
    cat <<EOT | sfdisk -uM /dev/sdb                 # 对sd卡进行分区,具体请参照sfdisk命令手册
    1,16,c                                          # 从SD卡的1M处开始,划分16M长度为第一个分区
    18,,L                                           # 余下的空间为第二个分区 (参考网站上使用的是 17,,L,这是错误的,重叠了)
    EOT
    
    mkfs.vfat /dev/sdb1                             # 格式化为fat
    mkfs.ext4 /dev/sdb2                             # 格式化为ext4
    
  • 写入 bootloader

    dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8
    dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32
    
  • 安装内核 uImage,设置启动参数

    安装 uImage

    mount /dev/sdb1 /mnt
    mkdir /mnt/boot
    cp linux-sunxi/arch/arm/boot/uImage /mnt/boot
    cp script.bin /mnt/boot
    

    设置启动参数 新建 boot.cmd 文件,文件内容如下

    setenv bootargs console=ttyS0,115200 noinitrd init=/init root=/dev/mmcblk0p2 rootfstype=ext4 rootwait panic=10 ${extra}
    fatload mmc 0 0x43000000 boot/script.bin
    fatload mmc 0 0x48000000 boot/uImage
    bootm 0x48000000
    

    由 boot.cmd 生成 u-boot能读取的 boot.scr 文件

    mkimage -C none -A arm -T script -d boot.cmd boot.scr
    

    把 boot.scr 拷贝到sd卡的第一个分区

    cp boot.scr /mnt/                               # 之前我们已经把 /dev/sdb1 挂载在 /mnt 上
    
  • 关于 uEnv.txt

    老版本的 u-boot 是可以直接读取boot.scr,但是新版本的貌似不支持,但是可以通过 uEnv.txt 间接读取boot.scr,
    当然,也可以直接使用 uEnv.txt 编写启动参数。

    我使用的 uEnv.txt

    bootenv=boot.scr
    loaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
    mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}
    

4、内核编译

git clone https://github.com/linux-sunxi/linux-sunxi.git

make ARCH=arm sun4i_defconfig
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=output modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=output modules_install

5、根文件系统

我使用的是 buildroot-2012.08 建立的文件系统,只需要生成 rootfs 就行了,kernel 与 toolschain 使用外置的,
不需要使用 buildroot 生成。

分享到:
评论

相关推荐

    arm-2014.05-29-arm-none-linux-gnueabi-linux

    arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ./arm-none-linux-gnueabi-gcc -v Using built-in specs. COLLECT_GCC=./arm-none-linux-gnueabi-gcc Target: arm-none-linux-gnueabi Configured...

    arm-linux-gcc.4.3.2.rar

    第一步:将arm-linux-gcc-4.3.2.bz2拷贝到虚拟机的任意目录 第二步:查看当前系统是否支持arm-linux-gcc 如果不存在 则继续如下步骤: 第三步:在/usr/local创建一个文件夹为arm mkdir /usr/local/arm 第四步:将arm...

    arm-2014.05-29-arm-none-linux-gnueabi

    arm-none-linux-gnueabi-gcc.exe -v Using built-in specs. COLLECT_GCC=arm-none-linux-gnueabi-gcc.exe COLLECT_LTO_WRAPPER=d:/eclipse/cross/arm-2014.05-29/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/...

    arm-linux-gnueabi-5.4.0.tar

    arm-linux-gcc交叉编译工具: 备注:使用此资源时需要解压两次,因为上传时显示资源重复上传失败,于是套了两层压缩。建议使用window系统下载先解压一次再到Linux中进行解压,这样方便查看 此外,如果把编译器gcc...

    arm-linux-gcc-3.4.1(交叉编译器)

    2.3.2 --with-float=soft --with-headers=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux/include --with-local-prefix=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux --disable-nls --...

    arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2.7z

    arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu 是由 CodeSourcery 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App...

    arm-linux-gcc-4.3.2(交叉编译器)

    2.3.2 --with-float=soft --with-headers=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux/include --with-local-prefix=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux --disable-nls --...

    arm-linux-ld命令说明

    arm-linux-ld 命令说明 arm-linux-ld 命令是 arm-linux 的链接器,用于将多个目标文件(.o 文件)链接成一个可执行文件。下面是 arm-linux-ld 命令的详细说明: 首先,我们需要了解的是,在编译和链接过程中,arm-...

    arm-linux-gcc和arm-elf-gcc 区别

    "arm-linux-gcc和arm-elf-gcc 的区别" arm-linux-gcc 和 arm-elf-gcc 是嵌入式交叉编译工具链中最常用的两个 GCC 工具链,它们之间的主要区别在于使用不同的 C 库文件。arm-linux-gcc 使用 GNU 的 Glibc,而 arm-...

    arm-linux-androideabi-4.9.zip

    《深入理解ARM-LINUX-ANDROIDEABI-4.9:构建NDK编译环境与CPU架构库》 在移动设备开发领域,Android NDK(Native Development Kit)扮演着至关重要的角色,它允许开发者使用C/C++编写底层代码,以实现高性能计算或...

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-guneabi.tar.xz gcc-linaro-4.9.4-2017.01-x86_...

    Ubuntu下安装arm-linux-gcc交叉编译

    Ubuntu 下安装 arm-linux-gcc 交叉编译 在 Ubuntu 系统中,安装 arm-linux-gcc 交叉编译器是一件非常重要的事情,这对于嵌入式系统的开发和调试具有非常重要的意义。本文将详细介绍如何在 Ubuntu 系统中安装 arm-...

    arm-linux-gcc-5.4.0.tar.gz交叉编译器

    《ARM-Linux GCC 5.4.0 交叉编译器详解》 在嵌入式系统开发领域,尤其是在Linux环境下,对于ARM架构的处理器,交叉编译器是必不可少的工具。ARM-Linux-GCC 5.4.0,作为一款针对ARM平台的Linux系统编译工具,具有...

    arm-linux-gcc-5.4.0.tar.gz

    `arm-linux-gcc`是针对ARM架构的Linux系统进行交叉编译的GCC(GNU Compiler Collection)工具链,它允许我们在一个更强大的主机平台上(如Ubuntu)为ARM设备构建应用程序。`arm-linux-gcc-5.4.0.tar.gz`是一个包含这...

    arm-linux-gcc-5.4.0交叉编译工具.rar

    ARM-Linux-GCC 5.4.0 是一个专门用于在ARM架构的Linux系统上进行编译的交叉编译工具链。它允许开发者在非ARM平台(如x86架构的个人电脑)上构建适用于ARM处理器的应用程序和库。这个版本的交叉编译器对于那些需要...

    arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2

    arm-linux-gcc编译器,64位的4.6.4版本,还有4.6~4.9的版本的arm-linuxgcc编译器在我的资源中可以找到

    arm-linux-gcc交叉编译器 3.4.1

    2.3.2 --with-float=soft --with-headers=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux/include --with-local-prefix=/opt/crosstool/arm-linux/gcc-3.4.1-glibc-2.3.2/arm-linux --disable-nls --...

    arm-linux-gcc-4.6.4-arm-x86-64交叉编译器安装包(含详细安装教程)

    ARM-Linux-GCC-4.6.4-arm-x86_64交叉编译器是为在基于x86架构的主机上构建针对ARM处理器的Linux应用程序而设计的工具链。这个工具链包括了编译器、链接器、库和其他必要的组件,使得开发者可以在不依赖目标硬件的...

    arm-linux-gcc-4.5.1(安装包及教程)

    标题中的"arm-linux-gcc-4.5.1(安装包及教程)"指的是一个用于在Ubuntu 14.04 64位操作系统上搭建ARM架构Linux系统交叉编译环境的工具包及其配套教程。这个工具包主要是GCC(GNU Compiler Collection)的一个版本,...

    arm-linux-gcc-4.6.4-arm-x86_32.tar

    arm-linux-gcc编译器,32位的4.6.4版本,还有4.6~4.9的版本的arm-linuxgcc编译器在我的资源中可以找到

Global site tag (gtag.js) - Google Analytics