本文主要用于记录安装过程,以便日后查阅回顾。

之前在自己的树莓派上运行的一直是通过NOOB安装的Raspbian,但是本人平时更喜欢用Fedora作为开发和使用环境,而且Raspbian上的软件包通常更新比较缓慢。因为树莓派2代B型上市前,树莓派的芯片都是armv6或者更早的架构,只能运行ARM架构的Raspbian或者Fedora 18及更早版本。树莓派2代B型搭载的芯片架构是armv7,树莓派3代搭载的芯片架构是armv8,这两种芯片都能够运行ARM架构的Fedora 23,而仅运行Raspbian也难以充分发挥硬件性能,因此通过查找资料,最终找到了Fedora官方的文档说明。首先在16G的存储卡上验证成功,今天就在64G的SD卡上再来一遍,顺便把每个步骤记录下来,以备自己和其他人参考。

0. 准备工作
下载Fedora 23 ARM镜像和raspberry专用固件(Boot和Kernel):
a. Fedora 23 ARM 官方下载地址 [https://arm.fedoraproject.org/]
b. Raspberry Pi专用固件下载地址 [https://github.com/raspberrypi/firmware/archive/master.zip]
下载完后解压到方便的目录备用即可。

1. 创建磁盘分区结构
因为官方的文档中只介绍了fdisk的使用,因此就偷懒,只参考了官方文档的步骤,至于其他工具是否可行,暂时就不研究了。有兴趣的话可以试试。
由于大部分操作都是需要根用户权限的,如果觉得经常sudo麻烦,可以直接su切换到根用户。
首先需要确定磁盘的设备路径,使用USB读卡器有可能路径是/dev/sdb,而使用计算机内置的读卡器,SD卡的路径可能是/dev/mmcblk0,自己根据情况确定。
确定设备路径后运行# fdisk /dev/sdb (这是我电脑上的路径)
回车后进入交互模式,p打印当前操作磁盘的分区信息,d删除,删除现存的分区。
接着说说我打算创建的分区:根据官方文档,boot分区128Mb就足够了,因为2代B型的内存是1G,所以swap分区干脆给1G;这时还剩大约58G可用空间,给系统16G以上的可用空间差不多了,如果打算作为开发工作站,装很多软件包,可以适当留多一些,剩下的空间作为用户分区。
然后输入n创建新的分区,回车后出现提示,输入p可以创建主分区,输入e可以创建扩展分区,我们要创建的是主分区,之后根据提示输入1表示要创建的是第一个分区,然后输入两次回车,跳过First sector选项,在Last sector选项中输入+128M,表示划分给分区的大小。屏幕上的提示信息可以参考如下:

fdisk> Command (m for help): n

       Partition type

          p   primary ( primary,  extended,  free)

          e   extended (container for logical partitions)

       Select (default p): p

       Partition number (-, default ): 

       First sector (-, default ): 

       Last sector, +sectors or +size{K,M,G,T,P} (-, default ): +128M        

       Created a new partition  of type 'Linux' and of size  MiB.

当看到Created a new partition 1 of type 'Linux' and of size 128 MiB.信息时就表示分区创建成功了。
根据刚才的提示我们可以知道,刚才创建的分区类型是“Linux”的,而树莓派要求Boot分区必须是FAT32,因此还需要输入t命令转换分区类型。输入L查询所有类型代码,可以查到W95 FAT32的代码是b,因此输入b,此时会显示类似下面的信息:

fdisk> Command (m for help): t

       Selected partition 

       Partition type (type L to list all types): b

       Changed type of partition 'Linux' to 'W95 FAT32'.

接着重复上面的步骤,创建swap分区和系统分区。注意新建分区和修改分区类型时选择分区的编号需要增长。根据官方文档,swap分区的分区类型应该是“Linux swap / Solaris”类型,对应的编号是82。而系统分区和用户分区则不需要修改分区类型。
于是,创建磁盘分区结构的工作就基本完成了,执行p命令查看结果,确认无误后执行w命令写入存储卡。如果系统提示需要重启或者重新连接读卡器的,先重启或者重新连接后再执行下一步。

2. 格式化刚才新建的SD卡分区
如果分区已经成功,这时在/dev/目录下应该能看到sdb和新建的4个分区:sdb1,sdb2,sdb3,sdb4。如果是用内置读卡器,则可能是mmcblk0和对应的4个分区:mmcblk0p1,mmcblk0p2,mmcblk0p3,mmcblk0p4。
通过mkfs.vfat+分区设备路径,将指定分区格式化为FAT32格式。通过mkswap+分区设备路径,将指定分区格式化为swap格式。通过mkfs.ext4+分区设备路径,将指定分区格式化为ext4格式。

3. 挂载Fedora ARM 23系统镜像和SD卡分区,拷贝镜像文件
如果镜像还没解压,可以通过# unxz Fedora-Server-armhfp-23-10-sda.raw.xz命令解压。
创建临时挂载点:# mkdir /tmp/img/
创建loop device:# losetup --partscan --find --show Fedora-Server-armhfp-23-10-sda.raw /dev/loop0
挂载loop device的根分区到临时挂载点:# mount -r /dev/loop0p3 /tmp/img/
这里说明一下,通常Linux系统镜像中第一个分区是boot分区,对应/boot/路径。第二个分区是swap分区,可以忽略,第三个分区才是根分区,对应/。因为我们不打算使用原生的boot和kernal,因此不挂载第一个分区。官方的说明是,随Fedora一起发布的kernal暂时没有支持树莓派芯片的所有特性,因此最好使用树莓派的专用内核固件。
接着挂载我们的SD卡系统根分区:
# mkdir /tmp/rpi/
# mount /dev/mmcblk0p3 /tmp/rpi/
挂载SD卡boot分区:
# mkdir /tmp/rpi/boot/
# mount /dev/mmcblk0p1 /tmp/rpi/boot/
挂载SD卡home分区:
# mkdir /tmp/rpi/home/
# mount /dev/mmcblk0p4 /tmp/rpi/home/
然后,将镜像根分区中的文件拷贝到SD的根分区中:# cp -rpv /tmp/img/* /tmp/rpi/
可以执行sync确认缓存同步。
最后解除镜像文件的挂载:
# umount /tmp/img
# losetup -d /dev/loop0

4. 拷贝树莓派专用固件
如果固件还没解压,可以通过# unzip raspberry-firmware.zip命令解压。
然后通过以下命令拷贝需要用到的文件:
# cp -r firmware-master/boot/* /tmp/rpi/boot/
# cp -r firmware-master/modules/* /tmp/rpi/lib/modules/
然后在SD卡boot分区下创建一个名为cmdline.txt的文件,用来向内核传递参数。该文件内容如下:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 elevator=deadline rootwait
这里需要注意,因为这个文件是给树莓派机器用的,SD卡插入树莓派后,SD卡的设备路径应该是/dev/mmcblk0,根分区设备路径就是/dev/mmcblk0p3,所以应该固定写这个内容,而不再是准备SD卡时在电脑上的设备路径。
接着在/boot分区下创建一个名为config.txt的文件,这一步是可选的,我第一尝试没有建立这个文件,系统可以正常启动。如果想建立这个文件,文件内容如下:

hdmi_force_hotplug=1

config_hdmi_boost=4

overscan_left=24

overscan_right=24

overscan_top=16

overscan_bottom=16

disable_overscan=0

core_freq=250

sdram_freq=400

over_voltage=0

如果要使用Waveshare 7inch HDMI LCD(C)屏幕的话,还要加入以下内容:

max_usb_current=1

hdmi_group=2

hdmi_mode=87

hdmi_cvt 1024 600 60 6 0 0 0

hdmi_drive=1

5. 设置fstab文件内容
这里需要注意,修改的是SD卡上的fstab文件,而不是自己电脑上的,如果改错了,自己的电脑就没法启动了,所以需要特别小心。
首先执行# blkid | grep sdb命令查询sdb磁盘每个分区的UUID,如果是内置读卡器,磁盘名可能替换为mmcblk0
然后使用常用的编辑器打开/tmp/rpi/etc/fstab文件,这个文件是在引导的时候用的,修改的时候需要比较严谨。首先,swap分区放在最后一行,行数不够可以拷贝一行。第一行一定是根分区,也就是我们分的第三个系统分区。往下必须是一棵树型结构,我们把boot分区放在第二行,把用户分区放在第三行,分别更新UUID、路径和分区格式信息。确认无误后保存。

6. 解除SD卡挂载

# umount /tmp/rpi/boot/

# umount /tmp/rpi/home/

# umount /tmp/rpi/

最后可以执行sync确认缓存同步。

7. 将SD卡插入树莓派并进行初始化
上电后正常情况应该会显示初始化向导,可以选择1~4进行指定的操作,如设定时区、语言、设置root密码、新建管理员账号等。完成后重启即可。
重启后执行以下命令移除没用使用到的Fedora官方内核并更新系统:

# dnf remove kernel kernel-core kernel-modules

# dnf update

8. 安装树莓派固件更新包
首先执行# dnf install binutils git安装依赖组件。
然后执行以下命令安装rpi-update:

# curl -L -o /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update

# chmod +x /usr/bin/rpi-update

最后执行# rpi-update即可进行专用固件升级。

参考资料:

1.  Raspberry Pi document on Fedora official wiki [http://fedoraproject.org/wiki/Raspberry_Pi]

在树莓派2代B型/3代 上安装Fedora23 - Installing Fedora 23 on Raspberry Pi 2 model B or Raspberry Pi 3的更多相关文章

  1. 树莓派3代B型 Raspberry Pi Model 3 B 安装 centos7系统

    板子类型: Raspberry Pi Model 3 B 搭配 32G的SD卡: 下载支持树莓派版本的centos7系统 https://buildlogs.centos.org/centos/7/i ...

  2. 树莓派2代 B型 4核 1G内存 raspberry pi 2 model B

    树莓派技术交流群:318799602 期盼已久的PI2 已经到货,Element14版,非RS版本.诚信卖家如期发货,不会像某些淘宝卖家一样,没有货还标注现货,发货时间一拖再拖. 树莓派的最新力作!! ...

  3. jvm中的年轻代 老年代 持久代 gc

    虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation).其中持久代主要存放的是Java类的类信 ...

  4. GC 年轻代 老年代 持久代

    转载自:http://www.cnblogs.com/yaoyuan23/p/5587548.html 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Gener ...

  5. 程序代写, CS代写, 代码代写, CS编程代写, java代写, python代写, c++/c代写, R代写, 算法代写, web代写

    互联网一线工程师程序代写 微信联系 当天完成 查看大牛简介特色: 学霸代写,按时交付,保证原创,7*24在线服务,可加急.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor ...

  6. CS代码代写, 程序代写, java代写, python代写, c/c++代写,csdaixie,daixie,作业代写,代写

    互联网一线工程师程序代写 微信联系 当天完成特色: 互联网一线工程师 24-48小时完成.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor code,代码原创.参考课程sl ...

  7. python+树莓派实现IoT(物联网)数据上传到服务器

    环境:raspbian-stretch(2018-06-27) 树莓派:3代B型 1.树莓派设备,需要在野外也能拥有独立联网能力,那必不可少的需要使用物联网模块. 这里使用的是微雪的SIM868通讯模 ...

  8. raspberrypi(树莓派)上安装mono和jexus,运行asp.net程序

    参考网址: http://www.linuxdot.net/ http://www.cnblogs.com/mayswind/p/3279380.html http://www.raspberrypi ...

  9. 在树莓派2上安装 Windows 10

    微软在2015年4月29日发布了树莓派玩家期待已久的 Windows 10 物联网核心预览版(Windows 10 IoT Core Insider Preview Image for Raspber ...

随机推荐

  1. Git标签和别名管理

    一.Git标签管理 标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态,也可以随时恢复到该状态 例如给master打一个v1.0的标签 先切换到master分支上去git checkou ...

  2. hiho一下18周 RMQ问题再临

    RMQ问题再临 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 终于,小Hi和小Ho踏上了回国的旅程.在飞机上,望着采购来的特产--小Hi陷入了沉思:还记得在上上周他们去 ...

  3. Struts2文件下载找不到输入流异常

    先发异常 Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check ...

  4. python 发邮件-带附件-文本-html

    #!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...

  5. 获取ICommand的图片

    BarButtonItem item = (BarButtonItem)e.Item; System.IntPtr _Handle = (System.IntPtr)(cmd as ICommand) ...

  6. Javascript模式(第三章字面量与构造函数)------读书笔记

    一 对象字面量 1.1对象字面量的语法 1,对象键值对哈希表,在其他的编程语言中称之为“关联数组”, 2 键值对里面的值,可以是原始类型也可以是其他类型的对象,称之为属性,函数称之为方法 3 自定义对 ...

  7. [Spring MVC] - JSON

    Spring MVC中使用JSON,先必需引用两个包:jackson-core-asl-1.9.13.jar.jackson-mapper-asl-1.9.13.jar 因为需要使用到jquery测试 ...

  8. 重装系统后,delphi7打开报错

    delphi7运行不正常的提示unable to rename'c:\program files\Borland\delphi7\Bin\delphi32.$$$'to'c:\program file ...

  9. 时时获得高德地图坐标 http://lbs.amap.com/console/show/picker

    1.高德地图标注 在做开发时,或者做高德地图标注的时候,要用到高德地图的坐标,时时获得高德地图坐标 http://lbs.amap.com/console/show/picker 老的高德地图标注地址 ...

  10. C#读取文件夹大小

    今天需要做一个读取文件夹大小的功能,为了避免遍历文件夹下所有文件并求出总大小,找到如下的好方法: 首先要在项目中引用一个COM组件:Microsoft Scripting Runtime,这个在Ref ...