cubieboard + busybox 打造mini系统「建议收藏」

cubieboard + busybox 打造mini系统「建议收藏」本文打造一个迷你的LINUX系统,讲述了arm嵌入式设备的常用方法和过程。适合新手入门,当然最好还是知道什么是交叉编译,和懂得linux的基本命令。先说说大致的思路,要在cubieboard板子上跑起来一个linux需要四大件:uboot,script-bin,linux内核(uImage),rootfs(这个我们自己做)前面3个已经很多人写过相关的文章了,我们不厌其烦的也多做一遍

大家好,又见面了,我是你们的朋友全栈君。

本文打造一个迷你的LINUX系统,讲述了arm嵌入式设备的常用方法和过程。适合新手入门,当然最好还是知道什么是交叉编译,和懂得linux的基本命令。

先说说大致的思路,要在cubieboard板子上跑起来一个linux需要四大件:uboot,script-bin,linux内核(uImage),rootfs(这个我们自己做)

前面3个已经很多人写过相关的文章了,我们不厌其烦的也多做一遍。

本文所用的系统是FC17-i686的系统,工具琏是4.7.2,arm-unknown-linux-gnueabi-,网上找的

需要准备的源码:

busybox-1.21.0 

    google一搜一大吧。

linux 3.4.5

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

sunxi-boards 

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

sunxi-tools

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

u-boot-sunxi

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

准备好这些东东,我们就可以了开始干活了,首先把SD卡拿出来,确保上面没有重要的数据资料。

我建议大家用root用户进行操作,不然经常使用sudo很麻烦

1.首先是给SD卡分区,假设你的卡是/dev/sdx

fdisk /dev/sdx

   我的卡是8g的,我的分区如下:

   /dev/sdb1            2048       34815       16384   83  Linux
   /dev/sdb2           34816    15122431     7543808   83  Linux

   分区大小可以按自己喜好,但第一个区要从2048开始,这个切记。什么fdisk不会用?。。。。d是删除,n是创建,w是保存,q是退出。

分好区,就是要格式化了

mkfs.vfat /dev/sdx1

mkfs.ext4 /dev/sdx2

现在把它们mount到本地

mount /dev/sdx1 /mnt/card1

mount /dev/sdx2 /mnt/card2,没有card目录请自己创建。

在开始所有的编译之前,我们要把交叉编译工具加入到PATH的环境变量

比方我的工具包放在/tools下,arm-unknown-linux-gnueabi-在/tools/bin目录下,那么

export PATH="/tools/bin:$PATH"

这个只对当前终端和其子终端有效。

2.编译uboot,

uboot是一个bootloader,有关他的介绍很多,我们在这里不多做介绍了。

进入uboot-sunxi目录:

make distclean CROSS_COMPILE=arm-unknown-linux-gnueabi-
make cubieboard CROSS_COMPILE=arm-unknown-linux-gnueabi-

编译完,执行命令

dd if=spl/sunxi-spl.bin of=/dev/sdb1 bs=1024 seek=8 
dd if=u-boot.bin of=/dev/sdb1 bs=1024 seek=32

在tools/下有个文件叫mkimage,以后编内核和boot.src会用上,把它拷贝到/usr/bin目录下吧。如果你有的话,可以不这么做。

cp tools/mkimage /usr/bin

3.编译sunxi-tools

不需要什么config,直接make

没有看到error,就说明成功了,请直接到4,不成功继续往下看。

如果出现报错:

Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc’
to the PKG_CONFIG_PATH environment variable
No package ‘libusb-1.0’ found
fel.c:21:20: 致命错误:libusb.h:没有那个文件或目录
编译中断。
make: *** [fel] 错误 1

如果是ubuntu用户,用apt-get install libusb-dev可以搞定。

但是如果和我一样是用fedora用户的话,就稍微麻烦点了。首先要去下一个叫libusb-1.0.9(版本号无所谓了)的包,解压进入目录

./configure
make CROSS_COMPILER=arm-unknown-linux-gnueabi-
make install
cp libusb/libusb.h /usr/include
cp libusb-1.0.pc /usr/share/pkgconfig

4.编译script-bin

这个最简单

cd sunxi-boards/sys_config/a10/
../../../sunxi-tools/fex2bin cubieboard.fex script.bin

把script.bin拷贝到/mnt/card1

cp script.bin /mnt/card1

5.编译uImage

这个时间会稍微长点。其实也很简单。不过有点要注意的,在linux下面解压unzip有时候会缺少文件,建议大家用7zip

make ARCH=arm sun4i_defconfig
make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- uImage

同样,把arch/arm/boot/uImage 拷贝到/mnt/card1

cp arch/arm/boot/uImage /mnt/card1

6.创建boot.src

cd /mnt/card1
touch boot.cmd
vi boot.cmd
#按i输入下面内容:
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 init=/sbin/init rootwait panic=10 ${extra}
fatload mmc 0 0x43000000 script.bin
fatload mmc 0 0x48000000 uImage
bootm 0x48000000
#按esc 再按:wq保存退出
mkimage -C none -A arm -T script -d boot.cmd boot.scr

现在你的/mnt/card1下面应该有4个文件:

boot.scr ; boot.cmd; uImage;script.bin;

启动分区的工作到此为止了。

7.编译busybox

make ARCH=arm defconfig
make ARCH=arm menuconfig

busybox settings–>

      build option –>

           Build BusyBox as a static binary (no shared libs) 把这个选上,意思是静态编译

           Cross Compiler prefix  输入交叉编译器前缀,我这里是:arm-unknown-linux-gnueabi-

networking Utilities  –>

      inetd 这个去掉,选上的话编译会有问题。

如果出现错误:

miscutils/nandwrite.c:49:26: fatal error: mtd/mtd-user.h: No such file or directory
compilation terminated.
make[1]: *** [miscutils/nandwrite.o] 错误 1
make: *** [miscutils] 错误 

则使用命令,拷贝相应文件

cp -Rv /usr/include/mtd/ include/

如果还缺少其它的,一样道理

编译完毕,

make install

默认装在_install文件夹下面

8.创建根文件系统

把_install 下面的东东都拷贝到/mnt/card2

cp -Rv _install/* /mnt/card2

cp -Rv examples/bootfloppy/etc /mnt/card2

在mkdir下面创建文件夹/dev /proc /sys /var /home /tmp /mnt /run等目录

修改etc下面的fstab文件如下:

proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

/dev/mmcblk0p1 /boot vfat defaults 0 2

/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

修改initab文件如下:

::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh

好了,umount 它们,尝试启动一下系统吧。

当你看到Please press Enter to activate this console,按一下,就可以进入终端了

网卡设备还没启动。如果要启动的话,也是可以的。不过不在这里一一说明了。呵呵

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163059.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue3 路由传参_vue router传参

    vue3 路由传参_vue router传参前言vue路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转。传参方式可划分为params传参和query传参,而params传参又可分为在url中显示参数和不显示参数两种方式,这就是vue路由传参的三种方式。方式一:params传参(显示参数)params传参(显示参数)又可分为声明式和编程式两种方式1、声明式router-link该…

    2025年8月22日
    5
  • git提交中E325: ATTENTION或E325: 注意 的解决方法

    git提交中E325: ATTENTION或E325: 注意 的解决方法问题引入首先看下图,在git提交、编辑、合并等过程中,如果没有将指令进行完就将git窗口关闭有时会出现这样的界面。原因分析git在指令意外中断时,一般会有一个缓存的机制,它会记住上次中断的问题。在下次进入vim指令时,如果很重要的中断一般会提示你前面有某个操作不当或者没有结束,就出现了上面的窗口。如果不解决就会一直缠着你,以至于出现该窗口后再输入git指令的话一般就不显示在…

    2022年5月19日
    48
  • 数据库表设计 基本思路[通俗易懂]

    数据库表设计 基本思路[通俗易懂]好的数据结构会影响速度。好的数据库表设计会影响数据库操作效率。特别是数据多的时候,如果表的结构不好的话操作的时候条件(where后的内容)会变的非常复杂。SQL是关系数据库中用到的一种语言。所以,为了简化SQL,表的关系(内部和外部)要尽量设计的合理。下面有几个可以参照的步骤:1)找出那个表要描述的东西;2)列出你想通过这个表得到的相关信息的列表;3)通过上面的信息列表,将信息

    2022年6月20日
    30
  • 散列查找和哈希查找_散列检索

    散列查找和哈希查找_散列检索散列表相关概念散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:存储位置=f(关键字)这里把这种对应关系f称为散列函数,又称为哈希(Hash)函数。采用散列技术将记录存在在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表。那…

    2025年6月8日
    2
  • plsql oracle 使用教程

    plsql oracle 使用教程课程一PL/SQL基本查询与排序    本课重点:    1、写SELECT语句进行数据库查询    2、进行数学运算    3、处理空值    4、使用别名ALIASES    5、连接列    6、在SQLPLUS中编辑缓冲,修改SQLSCRIPTS    7、ORDERBY进行排序输出。  8、使用WHERE字段。    一…

    2022年6月3日
    51
  • base编码器_base100编码

    base编码器_base100编码Base64编码是一种基于64个可打印字符来表示二进制数据的方法。目前Base64已经成为网络上常见的传输8位二进制字节代码的编码方式之一。为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如:传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制。图片的二进制流的每个字节不可能全部是可…

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号