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

之前在自己的树莓派上运行的一直是通过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. 《C与指针》第十一章练习

    本章问题 1.在你的系统中,你能够声明的静态数组最大的长度能达到多少?使用动态内存分配,你最大能获取的内存块有多少? answer: This will vary from system to sys ...

  2. 11.12模拟考T1(可持续优化)PS:神奇的东西

    1.数列操作   (array.pas/c/cpp) [问题描述] 现在有一个数列,最初包含0个数.现在要对数列操作n次,操作有3类. 1) a k,在数列的最后插入一个整数k 2) s 将最近插入的 ...

  3. 移动web

    1.分辨率 1900*1200这就是一个分辨率, 因为pt的存在,因此还会有一个逻辑分辨率的概念 2.ppi = pixels per inch这里inch不是平方英尺,是英尺 3.dp = devi ...

  4. asp.net mvc4 学习笔记一(基本原理)

    做了8年的asp.net webform,用过MVVM但还没用过MVC , 虽然项目不用MVC,但是还是想了解一下,今天第二天学习,以下是学习心得. VS2012默认带有asp.net mvc3和as ...

  5. python小知识点

    问题:求列表中每个元素的元素次方之和>>> a=[1,2,3,4]>>> k=len(a)第一种解法#    s=0#    for x in a:#        ...

  6. IDEA使用maven中tomcat插件启动项目乱码问题

    今天用IDEA来启动项目,使用的是maven中的tomcat7插件,正常启动后,再页面操作新增或修改数据时,发生了诡异的事, 中文保存后全部乱码...顿时不淡定了,接着就开始排查原因 首先检查IDEA ...

  7. MyBatis代码自动生成(利用命令)

    这几天在学习springmvc,需要用到mybatis,所以研究了一下mybatis自动代码生成,当然也可以手动敲,但是那样效率非常的慢,并且出错率也是很高的,利用MyBatis生成器自动生成实体类. ...

  8. java mongoDB 二级数组嵌套查询

    场景: 会员集合下有多个会员文档,会员文档下有多个订单文档,订单买了多个商品文档 member->orders>orderItems 要求: 通过会员id和商品id验证会员是否购买过该商品 ...

  9. php mysql 一个查询优化的简单例子

    PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化.下面通过一个简单的例子 ...

  10. html5之history对象 控制浏览器前进或后退事件

    一.摘要: 总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题. 二.总结: 实现效果: 实现代码: 上面的编辑页面加载的时候就要先调用 ...