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-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.bz2拷贝到虚拟机的任意目录 第二步:查看当前系统是否支持arm-linux-gcc 如果不存在 则继续如下步骤: 第三步:在/usr/local创建一个文件夹为arm mkdir /usr/local/arm 第四步:将arm...
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-gcc交叉编译工具: 备注:使用此资源时需要解压两次,因为上传时显示资源重复上传失败,于是套了两层压缩。建议使用window系统下载先解压一次再到Linux中进行解压,这样方便查看 此外,如果把编译器gcc...
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 是由 CodeSourcery 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App...
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 的链接器,用于将多个目标文件(.o 文件)链接成一个可执行文件。下面是 arm-linux-ld 命令的详细说明: 首先,我们需要了解的是,在编译和链接过程中,arm-...
"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:构建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_...
Ubuntu 下安装 arm-linux-gcc 交叉编译 在 Ubuntu 系统中,安装 arm-linux-gcc 交叉编译器是一件非常重要的事情,这对于嵌入式系统的开发和调试具有非常重要的意义。本文将详细介绍如何在 Ubuntu 系统中安装 arm-...
《ARM-Linux GCC 5.4.0 交叉编译器详解》 在嵌入式系统开发领域,尤其是在Linux环境下,对于ARM架构的处理器,交叉编译器是必不可少的工具。ARM-Linux-GCC 5.4.0,作为一款针对ARM平台的Linux系统编译工具,具有...
`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 是一个专门用于在ARM架构的Linux系统上进行编译的交叉编译工具链。它允许开发者在非ARM平台(如x86架构的个人电脑)上构建适用于ARM处理器的应用程序和库。这个版本的交叉编译器对于那些需要...
arm-linux-gcc编译器,64位的4.6.4版本,还有4.6~4.9的版本的arm-linuxgcc编译器在我的资源中可以找到
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交叉编译器是为在基于x86架构的主机上构建针对ARM处理器的Linux应用程序而设计的工具链。这个工具链包括了编译器、链接器、库和其他必要的组件,使得开发者可以在不依赖目标硬件的...
标题中的"arm-linux-gcc-4.5.1(安装包及教程)"指的是一个用于在Ubuntu 14.04 64位操作系统上搭建ARM架构Linux系统交叉编译环境的工具包及其配套教程。这个工具包主要是GCC(GNU Compiler Collection)的一个版本,...
arm-linux-gcc编译器,32位的4.6.4版本,还有4.6~4.9的版本的arm-linuxgcc编译器在我的资源中可以找到