Brillo: 将系统移植到Raspberry Pi 2B(树莓派)上

  • 编译
$ . build/envsetup.sh
$ lunch rpi-eng
$ make -j 4

又是漫长的等待。。。

  • 下载

先对SD卡进行分区,并进行格式化。需要3个分区, 第一个分区存放bootcode.bin, config.txt, start.elf, fixup.dat, cmdline.txt, kernel7.img, ramdisk7.img;第二个区公为系统分区:会写入system.img;第三个分区为data分区,用于存放运行时的配置文件等。

可以参考这个(一定要知道SD卡是属于哪个设备文件, 可以用dmesg | tail 查看):

$ sudo fdisk /dev/sd?

Command (m for help): o
Building a new DOS disklabel with disk identifier 0x29767d95.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-15523839, default 2048): 8192
Last sector, +sectors or +size{K,M,G} (8192-15523839, default 15523839): +400M 

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 2): 
Using default value 2
First sector (2048-15523839, default 2048): 827392
Last sector, +sectors or +size{K,M,G} (827392-15523839, default 15523839): +112M

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 3): 
Using default value 3
First sector (2048-15523839, default 2048): 1056768
Last sector, +sectors or +size{K,M,G} (1056768-15523839, default 15523839): +512M

Command (m for help): p

Disk /dev/sd?: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x29767d95

   Device Boot      Start         End      Blocks   Id  System
/dev/sd?1            8192      827391      409600   83  Linux
/dev/sd?2          827392     1056767      114688   83  Linux
/dev/sd?3         1056768     2105343      524288   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

可以看到/dev/sd?1为linux分区(id为83),一定要将其改成b (FAT32)分区,不然系统无法识别,开不了机。

下面是格式化分区:

$ sudo mkfs.vfat /dev/sd?1
$ sudo mkfs.ext4 /dev/sd?3

挂载/dev/sd?1分区,将out/target/product/rpi/boot中的文件copy过去,再将kernel, ramdisk.img也copy过去:

$ sudo mount /dev/sd?1 /mnt/
$ sudo cp out/target/product/rpi/boot/* /mnt/
$ sudo cp out/target/product/rpi/kernel /mnt/kernel7.img
$ sudo cp out/target/product/rpi/ramdisk.img /mnt/ramdisk7.img
$ sudo umount /mnt
$ sync

接着将system.img写到/dev/sd?2分区中(一定要按照下面的方法进行操作,如果进行mount, cp, umount的操作,开机的时候会出现意想不到的问题,因为system.img中的文件是有SELinux context的,使用cp命令无法进行完整的将SELinux context copy过去; SELinux context可以通过ls -Z or ps -Z查看):

$ sudo dd if=out/target/product/rpi/system.img of=/dev/sd?2
$ sync

做完这些,你就可以将TF卡插入Raspberry Pi 2B上开机运行了。

《Brillo: 将系统移植到Raspberry Pi 2B(树莓派)上》有7个想法

  1. 不错的想法,在raspberry pi 2b上做开发,硬件相当便宜(相对于google默认支持的开发板,intel edison以及qualcomm dragon board)

        1. 我在github.com/yudatun这里创建了一个orgnization, 用于brillo的深度定制,目前我已经做了不少工作了,我觉得我们可以把彼此好的想法融合在一起,方便留个邮箱交流下么?

  2. 不好意思,
    我用您的步驟方法,
    畫面和輸出都與您的相同,
    不過在用avahi-daemon看輸出時,
    完全沒有反應,
    只能看到自己,
    我用HDMI接上螢幕,
    螢幕也是黑的,
    不知道可以提供一些建議嗎??
    感恩感恩~~
    ——————————————————————————————————————————-
    $ avahi-browse -a -r
    + eth0 IPv6 my-ubuntu [4c:72:b9:c8:32:a4] Workstation local
    + eth0 IPv4 my-ubuntu [4c:72:b9:c8:32:a4] Workstation local
    = eth0 IPv6 my-ubuntu [4c:72:b9:c8:32:a4] Workstation local
    hostname = [my-ubuntu.local]
    address = [fe80::4e72:b9ff:fec8:32a4]
    port = [9]
    txt = []
    = eth0 IPv4 my-ubuntu [4c:72:b9:c8:32:a4] Workstation local
    hostname = [my-ubuntu.local]
    address = [192.168.157.2]
    port = [9]
    txt = []

    1. 目前存在的问题是有时候有线网络可能会分配不到IPv4的IP地址,也就无法通过avahi-browse查看。(也有可以是有线网络使用的是固定的IP地址)
      你可以通过串口查看kernel log及执行shell命令查看问题出在哪里。
      你可以查看我这篇文章https://www.brobwind.com/archives/975,运行我预编译的系统,同时这里包含最新的RPi BSP代码,你可以编译看看(很可惜有线网络有时候也不能自动获取IP地址,无线网络(RPi 3B)没有发现问题)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注