移植ubuntu14.04根文件系统至beaglebone开发板探索

移植ubuntu14.04根文件系统至BeagleBone开发板探索

移植背景

我是一个linux小白,然而由于项目需要,一个师兄为机器人的控制定制了一个开发板,基于beaglebone。由于此开发板是为实现机器人控制所需功能而特殊定制的,所以其内核已经确定并预先装好,现在需要将ubuntu14.04根文件系统移植进去,然后在该系统中安装ROS工具包。可能是因为ubuntu对于ROS工具包的支持性能比较好,所以才指定要用ubuntu的吧。

经过两三个月时间的摸索,终于算是告一段落了,之前在学习过程中也总结了一系列的文档:
定制适用于ARM平台的Ubuntu rootfs(根文件系统)http://blog.csdn.net/mountzf/article/details/51707853
ubuntu中手动编译源码安装Xorg-server过程中依赖关系的解决http://blog.csdn.net/mountzf/article/details/51920174
搭建本地ubuntu镜像服务器(arm版)http://blog.csdn.net/mountzf/article/details/52014723

准备工作

熟悉linux操作系统

掌握基本的命令行操作、bash脚本编程、vi编辑器使用、makefile制作、linux文件结构等知识。因为就算日后在arm平台上也是操作ubuntu系统,必要的linux基础知识不可或缺,况且在安装系统和准备安装的过程中也是要经常用到这些知识的。开始安装了一个ubuntu的双系统,然而ubuntu系统的无线网卡特别不稳定,连接至无线网后过大概一个小时就会自己掉线然后就除非重启才能再次连接上。我这linux小白一个可是迫切需要经常上网查资料的,所以,我要么是经常重启,要么是来回切换于windows和ubuntu之间,那一周时间我关机的次数起码不下于40次吧,我都心疼陪伴我了两年时间的电脑啊。

终于有一天,我想我可以试一下虚拟机,就琢磨着把ubuntu卸载了。都怪我当时太年轻啊,以为卸载个ubuntu还不是轻而易举的事,在网上看了一下说是如果ubuntu安装在一个独立的分区,可以直接把那个分区格式化了就可以了。于是我就傻乎乎的把那个分区删除了,然后,然后我的电脑就启动不了了。因为装完双系统之后系统默认先启动ubuntu引导,把ubuntu删除之后ubuntu引导找不到了,也就无法启动了。必须进入bios选择windows boot manager启动才能进入windows系统,后来说一个什么工具可以修复,我试了一下,好像是可以启动了,但是还是会出现烦人的grub引导,对于处女座的我来说简直是不可忍受,于是我又百度一下怎么删除这个引导,不知我看了那个水货的回答,说是可以在控制台中用disk clean命令,大哥,这个命令能使随便用的么。。。然而啥也不懂的我就傻乎乎的用了,然后,我的其他的三个存储文件和资料的盘都找不到了,那可是我的全部回忆啊。就在我忧伤的觉得我要重新开始一切的时候,我在网上发现了和我一样傻的人,他后来在国外的一个网站上找了一个很好用的小工具,就把原来丢失的信息找回来了。我就怀着试一试的心态下载了下来(绝对是试一试的心态),刚开始好像并不太好用,总是卡住(好吧,我承认,我是不太会用),后面我多试了几次,大概明白了它的操作流程,最后竟然神奇的把丢失的一切找回来算了,unexpected surprise。但是那个开机grub引导还是存在,我实在是懒得和它过多纠缠,果断重装系统,本来就觉得电脑用win7系统发热厉害,就换成win10系统了。那一夜,捣鼓了整整一宿,直到第二天早晨7点钟都没有合眼,直接导致第二天晕晕乎乎如在天境。重装完系统,安装了虚拟机平台VMware workstation 12 player,然后安装了ubuntu16.04LTS server版,小巧好用,至少目前为止是这样的。

查询移植方法

查询向arm开发板移植ubuntu系统的方法,特别是仅仅移植根文件系统的步骤和注意事项。由于对于不同系统的区别了解不清楚,况且在网上基本上都是基于busybox自制根文件系统然后移植至arm平台上,所以我以为我也需要自制一个根文件系统然后抑制到arm平台上,所以就有了步骤3。

准备根文件系统

我大致学习了linux系统启动时所需的根文件系统的基本知识,了解了linux系统内核启动和根文件系统挂载的流程,所以我就结合网上教程,基于busybox开始制作根文件系统。
网上教程很多,可以参考。通过这个过程主要进一步理解了linux系统在启动的时候的具体流程,为后面定位错误、排除错误奠定了良好的基础。

同时,我也抱着试一试的心态在ubuntu官方网站查询并下载了ubuntu14.04的一些预编译好的根文件系统,万一要好使呢?唉,懂得太少的人就会怀有侥幸心理,而无法从根本上和原理上去解释为什么可行和为什么不可行,还是很可怜的,如脚下的蝼蚁一样。在beagle bone官网找到了一个适用于beaglebone的预编译好的的根文件系统,http://www.armhf.com/boards/beaglebone-black/(实际我还找了其他几个预编译好的文件系统,但是尴尬的是只有这一个好使)ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz。看其介绍,这个文件系统This image uses the Ubuntu 14.04 core filesystem from Ubuntu with the minimal meta package applied. The kernel is compiled from the mainlineLinux kernel git repository. The result is an easy-to-install and stable Linux image that works with both the BeagleBone and the BeagleBone Black boards.
注意:实际就是使用ubuntu官方提供的ubuntu base最小文件系统ubuntu-base-14.04.3-core-armhf.tar.gz (http://cdimage.ubuntu.com/ubuntu-base/releases/14.04/release/)进行再次定制的,内核则是来自https://www.kernel.org/pub/linux/kernel/v3.x/进行编译。我应该也可以按照这个思路来进行。

烧写文件系统至TF卡

烧写根文件系统至micro SD卡第五分区。师兄告诉我根文件系统的挂载目录在/dev/mmcblk0p5,好像是SD卡的第五个分区。汗,当时我连磁盘怎么分区可都是不知道的啊!我将板子上原有的一个含有其他根文件系统的SD卡接到电脑上,fdisk -l命令查看了一下这个卡的分区信息,分了三个分区sdb1、sdb2、sdb5,其中根文件系统就写在sdb5中。看完之后,心里大概有谱了,查了一下磁盘分区方式后,利用fdisk命令完成了磁盘分区,利用mkfs命令分别为每个分区建立了文件系统,然后将/dev/sdb5挂载至挂载点,利用cp命令将根文件系统拷贝进去,然后就可以等待启动的过程了。

注意烧写的过程要保证文件属性不变,要么直接tar解压到TF卡中,要么在复制的时候加上选项-p,因为不加-p进行复制的时候会更改文件的属性,导致有些文件无法运行。

启动,难产

基于busybox自制文件系统情况

遇到问题:有时候在板子上电的时候串口没有任何消息输出,暂时不知道该如何解决
已解决:原来是我的串口引脚接错了,汗。。。由于对串口的引脚不是很熟悉,所参考的资料的串口接线图写的不是很明白,没有写清楚该示意图所对应的串口方向,结果就看反了,引脚接错,当然没有任何输出。串口的公母口的数字标号是对应相同的,即相连的引脚的标号相同。
自制根文件系统输出:

[19:59:10.086] [2.855868] EXT3-fs (mmcblk0p5): error: couldn’t mount because of unsupported optional features (240)
[19:59:10.118] [2.867849] EXT2-fs (mmcblk0p5): error: couldn’t mount because of unsupported optional features (240)
[19:59:10.122] [2.893085] EXT4-fs (mmcblk0p5): mounted filesystem with ordered data mode. Opts: (null)
[19:59:10.148] [2.901822] VFS: Mounted root (ext4 filesystem) readonly on device 179:5.
[19:59:10.154]
[19:59:10.166] [2.915897] devtmpfs: mounted
[19:59:10.166] [2.919394] Freeing init memory: 216K
[19:59:10.170] ———-mount all———-
[19:59:10.289] mount: mounting none on /proc failed: Device or resource busy
[19:59:10.317] mount: mounting none on /sys failed: Device or resource busy
[19:59:10.322]
[19:59:11.031] / #

挂载fstab中定义的设备时出现错误,现在想来是当时在根据网上教程制作根文件系统时照葫芦画瓢,没弄明白其中的含义,所以教程中的设备和我实际的设备并不一样,所以在挂载设备时报错。
我当时的/etc/fstab中的内容

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0

根据上面的错误提示,mounting none on /proc,也就是说我没有proc设备,当然无法挂载到/proc上,所以要根据自己的实际情况来定制根文件系统。

直接下载beaglebone的预编译好的的根文件系统情况

在启动的时候遇到错误,错误提示应该是根目录挂载错误,找不到挂载目录。根据之前对linux文件系统启动顺序的了解情况,应该是文件/etc/fstab中的挂载目录设置不正确,修改文件系统中/etc/fstab内容,打开后内容如下:

#                                 
/dev/mmcblk0p2    /            ext4     defaults,noatime,errors=remount-ro   0      1
/dev/mmcblk0p1    /boot/uboot   vfat      defaults,noatime                 0      0

可以看到在其原来的设置中,根目录是挂载在TF卡的第二分区的,而我们板子上内核中预定义的根目录中的挂在位置是在TF卡的第五分区。在base system下获得读写权限,然后执行命令mount –n –o remount, rw /获得读写权限,然后vi file就可以修改一些配置文件了。修改/dev/mmcblk0p2/dev/mmcblk0p5即可,然后重新启动,发现文件系统正常启动,并且出现了最后的登陆窗口。

在启动时遇到错误提示:Mount failed for selinuxfs on /sys/fs/selinux: No such file or directory虽然不影响正常使用,但是对于处女座的我来说,好像是不可忍受的。原因应该是/sys/fs/下不存在文件selinux,于是想在/sys/fs/下新建文件selinux,touch selinux,然而却遇到cannot touch ”selinux“:no such file or directory。原来sys文件夹和proc文件夹一样,是一个虚拟的文件系统(大小都为0),不能再linux系统中在该文件夹中创建文件或文件夹,所有的内容默认为内核自动创建的,所以这个好像解决不了,难道只能忍着?

修正:Waiting up to 60 more seconds for network configuration…问题
在arm板子上成功移植ubuntu14.04根文件系统之后,成功启动,甚是激动,但是发觉启动时间太长,足有2分钟之久,查看启动日志,发现在配置网络(network congfiguration)时等的时间特别长,有1分钟多时间,特别是这句Waiting up to 60 more seconds for network configuration…必应了一下Waiting up to 60 more seconds for network configuration,发现是在/etc/init/failsafe.conf文件中所定义的:

# failsafe
description "Failsafe Boot Delay"
author "Clint Byrum "
start on filesystem and net-device-up IFACE=lo
stop on static-network-up or starting rc-sysinit
emits failsafe-boot
console output
script
        # Determine if plymouth is available
        if [ -x /bin/plymouth ] && /bin/plymouth --ping ; then
                PLYMOUTH=/bin/plymouth
        else
                PLYMOUTH=":"
        fi
    # The point here is to wait for 2 minutes before forcibly booting
    # the system. Anything that is in an "or" condition with 'started
    # failsafe' in rc-sysinit deserves consideration for mentioning in
    # these messages. currently only static-network-up counts for that.
        sleep 20
    # Plymouth errors should not stop the script because we *must* reach
    # the end of this script to avoid letting the system spin forever
    # waiting on it to start.
        $PLYMOUTH message --text="Waiting for network configuration..." || :
        sleep 40
        $PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :
        sleep 59
        $PLYMOUTH message --text="Booting system without full network configuration..." || :
    # give user 1 second to see this message since plymouth will go
    # away as soon as failsafe starts.
        sleep 1
    exec initctl emit --no-wait failsafe-boot
end script
post-start exec logger -t 'failsafe' -p daemon.warning "Failsafe of 120 seconds reached."

sleep既是休眠的意思,原来是系统文件在这里让等啊。。。。。。在linux社区查阅资料时发现了一个有趣的事:很多人以为系统文件让在这里等2分钟之久是一个bug,然而几年前的系统中只让等了不超过30秒,于是有一些需要动态配置网络和开机联网的系统在这30秒内就不能完成网络连接,系统启动时就不能上网。于是就有人向linux社区举报这是一个bug,于是乎,开发者说,既然30秒搞不定,咱就时间长点儿,多等一会儿吧,于是就把时间延长至120秒钟。。。。。。NOW,现在又有人要把等的时间太长作为一个系统bug报了上去。。。实际上对于设置了静态网络地址的系统来说,没必要等太长时间。我尝试把时间都改为1秒钟(改成0的话好像会出问题),启动时间缩短至27秒钟左右,启动后ifconfig查看网络地址配置,配置正确,所以可以根据自己系统的实际状况进行更改。

网络设置

修改为静态ip地址

对于这种经常需要确定知道板子上具体ip地址的时候,把网络地址设置为静态ip地址是非常有必要的。修改配置文件/etc/network/interfaces内容如下:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
      address 192.168.1.115
      netmask 255.255.255.0
      gateway 192.168.1.0
      dns-nameservers 114.114.114.114 8.8.8.8

# The primary network interface
auto eth1
iface eth1 inet static
      address 192.168.2.115
      netmask 255.255.255.0
      gateway 192.168.2.0

这样就把两个网卡的地址分别设置为192.168.1.115192.168.2.115了。注意在第一个网卡设置中加入dns服务器地址设置,这样的话系统会自动将该条目中的dns地址加入到/etc/resolv.conf中。

连接网络

由于实验室没有有线网,只能一边抱着个箱子装板子,另一边背着电脑回了宿舍,拿着钥匙进了蔡师兄屋里,才终于找到了一个可以使用网线的地方。连接好网线,设置好ip地址、网关和dns等,最后发现能上网,但是掉包严重,ping网关都掉包,ping外网也掉包,高达80%+,上网时丢包过于严重,包管理器都无法正常下载软件包。板子无法直接上网,被逼无奈,于是想能不能用网线把板子和电脑连接起来,让板子通过电脑的网络上网?遂必应“如何让一台电脑通过另一台电脑上网?”惊喜地发现竟然还真的可以,原来我真的是那么地无知啊。。。通过这个找到了网络设置中的“网络共享”选项,由于我是让笔记本通过无线连接网络,然后让板子通过网线和笔记本相连(笔记本本身拥有两个网卡,一个无线网卡,一个有线网卡)。在勾选共享网络时,系统会给本地连接(有线网卡)指定一个静态ip地址,通过这个ip地址可以共享网线网卡的网络。本地连接如下图所设置:这里的ip地址192.168.137.1是刚才系统给定的ip地址,然后子网掩码设为255.255.255.0,默认网关设为192.168.137.1,首选dns也设为此。然后在仿真终端中设置板子的网络配置,将/etc/network/interfaces中的配置文件修改为:
address:192.168.137.xxx(同一个网段)
netmask:255.255.255.0
gateway:192.168.137.1
然后重启,再修改dns域名解析服务器为192.168.137.1,即修改配置文件/etc/resolv.conf
nameserver 192.168.137.1
保存即可。此时就可以上网了!
再加一条:需要关闭电脑防火墙!启动InternetConnectionSharing(ICS)服务。

今天琢磨了一下,利用internet共享上网和利用路由器上网的原理基本是一样的,为什么利用internet共享就可以正常上网,而利用路由器的时候就断断续续呢?仔细考虑了一下两者之间的区别,网关的设置应该都没有问题,在地址解析DNS的时候好像也没问题,就是在进行网络传输的时候不稳定,由于在使用路由器的时候设置的静态ip地址192.168.1.100,很靠前的一个局域网地址,有可能就和其他上网设备冲突了,而在使用internet共享时只有板子一个连接,所以不存在ip地址冲突的可能性。在将静态ip地址修改为192.168.1.105后,网络连接正常,果真是由于静态ip地址冲突导致的问题。
注意:一定要注意静态ip地址可能带来的问题!

配置无线网卡,安装无线网卡(TL-WN725N)驱动

由于当时实验室没有有线网,无法使用网线,所以考虑安装个usb无线网卡,于是在淘宝上买了TP-Link TL-WN725N无线网卡。通过把驱动文件rtl8188eu_USB_linux.tar.gz拷贝进SD卡第一分区,然后在板子上启动后找到该文件,tar解压后准备make,然而提示:make:command not found。原来系统中好多命令没有安装,又没有网络,该如何把这些命令安装进去呢?起码要能够把无线网卡驱动安装成功吧。。。

ubuntu@ubuntu-armhf:~$ lsusb
Bus 001 Device 004: ID 0bda:8179 Realtek Semiconductor Corp.
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 004: ID 0bda:8179 Realtek显示usb无线网卡已经正常挂载,但是没有驱动,不支持。我试着把笔记本电脑中的linux系统中的make命令和gcc命令拷贝至arm中,然而在执行时遇到”cannot execute binary file:execute format error”,原来是两者的内核CPU不同,所运行的文件格式也不同。

(20160605继续)继昨天成功连接网络后,今天相继把系统常用命令安装完毕,在http://download.csdn.net/detail/rainysia/6754869中重新下载了一个无线网卡rtl8188eu的驱动deb安装包,直接dkpg –i后提示需要安装dkms,apt-get install dkms后提示依赖树有问题,需要apt-get –f install修复依赖树,按照提示进行之,然后再dpkg –i,成功安装,lsusb命令后发现 Bus 001 Device 003: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter,已经成功识别为无线网络适配器了。然而ifconfig并没有发现wlan0挂载,运行insmod 8188eu.ko时报错,仔细探究原来并没有生成8188eu.ko模块,通过dkms status发现并没有编译,dkms bulid –m rtl8188eu –v 0+git20130406,提示找不到内核头文件,原来是因为师兄提前把内核预装好了,后安装文件系统后并不能与头文件建立联系。
Error! Your kernel headers for kernel 3.8.13 cannot be found.
Please install the linux-headers-3.8.13 package,
or use the –kernelsourcedir option to tell DKMS where it’s located
从网上下载不到内核安装文件,而师兄拷贝过来的include文件好像不能直接用,真是坑。。。

小技巧:修改终端输入命令行的列数:stty cols 156

在文件系统上安装软件

运行apt-get update遇到了“Hash Sum mismatch”错误,通过网上的经验,输入:

apt-get clean
apt-get update –fix-missing

然而并不好使。有网友说可能是软件源的问题,为apt-get update更换源,其源配置文件保存在/etc/apt/sources.list中,将该文件中的网址http://ports.ubuntu.com/全部替换为http://ftp.ubuntu-tw.org/mirror/(台湾的一个源网站),替换之前记住要保存一个备份文件sources.list.bak。
最近发现了一个速度相当不错的国内源:http://mirrors.ustc.edu.cn/ubuntu-ports/中科大的镜像服务器,换成这个会更好。

vi sources.list
:%s/ ports.ubuntu.com/ ftp.ubuntu-tw.org\/mirror/g
:wq

更换完源网站之后,下载正常,看来造成此现象的主要原因就是原来的网站是国外网站,国内访问起来极其不稳定,所以下载过程中数据传输出现问题,导致校验不能通过。

安装程序包时板子卡住了,强制断电后再启动,出现

The disk drive for / is not ready yet or not present.
keys:Continue to wait, or Press S to skip mounting or M for manual recovery
 * Starting Mount filesystems on boot[fail]

输入M进入控制台,输入

mount –n –o remount,rw /
dpkg –configure –a  

系统自动继续完成程序安装,然后ctrl+D重启即可正常启动。按照教程http://wiki.ros.org/indigo/Installation/UbuntuARM把ROS安装到板子上看一看,按照教程,ROS安装成功,试用没有问题。

安装图形界面

今天下午卢师兄过来,试了一下板子,尝试加载图形界面,发现默认安装的文件系统并没有图形界面。下载相关文件后还是不能启动,原来是ubuntu新版本的配置文件问题。后面回去先试着根据wiki里面关于图形界面的配置教程,加载起图形界面看一下效果。实际最重要的问题是现在还不知道这样做能否行得通,要根据自己所需功能进行定制的话,就需要自己下载并按照需求重新编译源文件,这是一个工作量相当大的一件事。如何去下载ubuntu的源文件还不得而知,而我又对linux系统了解的不是很透彻,我知道我肯定可以搞定,就是可能需要挺长的时间。

一段时间后,因为只要安装和图形应用有关的程序,都会提示相同的错误:Package libpam-systemd:armhf is not configured yet,然后这个又是其他很多应用程序的依赖,所以导致很多都安装不了。在论坛中搜索这个错误,真有点儿大海捞针的感觉。。。
最后尝试了很多网上的解决方法,都没有效果。后来在一个论坛中说是内核版本太老导致不支持cgroups管理功能,内核版本升级之后就恢复正常了,在和卢师兄讨论这个问题的时候,他说他有可能把内核这个功能给剪裁掉了,没有编译这个功能。后来看了一下内核编译选项,果然如此。原因是内核不支持cgroups,后来重新编译内核加上control groups后就可以正常安装了。

制作最小ubuntu for arm 文件系统

今天试了下前两天自己做的系统,分别是在ubuntu系统下基于debootstrap制作的最小文件系统和在ubuntu官网提供的ubuntu-core的基础上修改的文件系统。观察其启动过程,应该是都通过了文件系统检查并已成功启动,因为kernel输出的启动信息都到了* Stopping System V runlevel compatibility[ OK ],然而都是无法正常显示登陆界面,致使无法登陆。查询原因,应该是串口登录设置不正确,针对根据debootstrap制作的无论怎么修改串口设置,都不见成效,最后只能暂时放下。根据ubuntu-core更改的系统,一开始也是启动到相同的位置就卡住了,由于之前从beaglebone官网上下载的能够正常启动的文件系统就是beaglebone根据ubuntu-core更改的,于是我参考了一下之前下载的那个文件系统中的串口登录设置,发现其/etc/init/文件夹下有一个名为serial.conf的文件,打开后其内容如下:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty 115200 ttyO0

额,竟然是ttyO0,不是tty00!!!!!怪不得刚才在第一个文件系统中尝试tty00没有反应,在linux下O和0可真像啊。。。对了,在第二个系统中我是直接把那个serial.conf复制过去的,然后就正常气动了。要不然让我写成了tty00,又不知道要再在这里卡多少天呢,但是这也暴露了对于文件系统内部的知识,我还是很欠缺的。把第一个系统中的串口登录配置也改为serial.conf时,成功启动!
在成功启动的系统中,又遇到了用户权限问题,系统里面没有root用户权限。应该是当时没有修改debootstrap的root密码导致的。在PC上通过chroot更改根目录后,执行:
passwd root修改root密码后,在板子上就可以通过su –切换至超级用户,然后修改/etc/sudoers里面的内容,在root行下加上这句:
user ALL=(ALL:ALL) ALL,然后user就可以获得root权限了。
有些交叉编译器在制作时限制了使用的最低内核版本,不要比这个版本低就可以了。

附录:根文件系统各部分功能详解

/:根目录,一切从这里开始
/bin:包含系统启动和运行所必须的二进制文件(程序)
/boot:包含linux内核、最初的RAM磁盘映像(系统启动时,驱动程序会用到),以及启动加载程序。
有趣的文件:
1./boot/grub/grub.conf或menu.lst,用来配置启动加载程序
2./boot/vmlinuz,linux内核
/dev:这是一个包含设备节点的特殊目录。“把一切当成文件”也适用于设备。内核将它能够识别的所有设备存放在这个目录里。
/etc:包含了系统层面所有的配置文件,同时也包含了一系列的shell脚本,系统每次启动时,这些shell脚本都会打开每个系统服务,该目录中包含的内容都应该是可读的文本文件。
有趣的文件:
1./etc/crontab,该文件定义了自动化任务运行的时间
2./etc/fstab,存储设备以及相关挂载点的列表
3./etc/passwd,用户账号列表
/home:在通常的配置中,每个用户都会在/home目录下拥有一个属于自己的目录,普通用户只能在自己的主目录中创建文件。
/lib:包含核心系统程序使用的共享库文件,这与windows的dll类似
/lost+fond:每个使用linux文件系统的格式化分区或设备,都会有这个目录,当文件系统崩溃时,该目录用于恢复分区。
/media:在现代的linux系统中,该目录包含可移除媒体设备的挂载点,比如usb驱动、cd-rom等,这些设备在插入计算机后,会自动挂载到这个目录节点下。
/mnt:在早期的linux系统中,该目录包含手动挂载的可移除设备的挂载点。
/opt:用来安装其他可选软件,主要用来存放可能安装在系统中的商业软件。
/proc:linux内核维护的虚拟文件系统,不是存储在硬盘上真正的文件系统,它包含的文件是内核的窥视孔,该文件是只读的,从中可以看到内核是如何监管计算机的。
/root:root账户的主目录
/sbin:该目录放置“系统”的二进制文件,这些程序执行重要的系统任务。
/tmp:存放各类程序创建的临时文件目录,某些配置使得系统重启时会清空该目录。
/usr:可能是linux系统中最大的目录树,包含普通用户所使用的程序和相关文件。
/usr/bin:放置了一些linux发行版安装的可执行程序,该目录可存储成千上万个程序。
/usr/lib:/usr/bin中的程序所使用的共享库。
/usr/local:并非系统发行版自带、但却在系统中使用的程序的安装目录,由源代码编译好的程序通常安装在/usr/local/bin中。
/usr/sbin:包含更多的系统管理程序。
/usr/share:包含了/usr/bin中的程序所使用的全部共享数据,这包括默认配置文件、图标、屏幕背景、音频文件等。
/var:除了/tmp和/home之外,目前看到的目录相对来说是静态的,其包含的内容基本是不变的。而那些可能改变的数据存储在/var目录树中,各种数据库、假脱机文件、用户邮件等都存储在这里。
/var/log:包含日志文件,记录了各种系统活动,这些文件非常重要,并且应该时不时地监控他们,其中最有用的文件是/var/log/messages。
配置文件/etc/fstab 文件系统表
配置文件/etc/inittab 初始化设置
初始化设置文件/etc/init.d/rcS

祝枫
2016年8月2日于深圳

你可能感兴趣的:(ROS,Operation,System,ROS学习笔记)