嵌入式ROOTFS transplantation
作一个嵌入式Linux rootfs,并且实现 web 服务
1. 文件系统简介
•主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。
【1】文件系统
挂载文件系统
mount -t vfat /dev/mmcblk1p1 /mnt
挂载 指定需要挂载的文件系统的类型 设备节点(文件) 挂载点(文件系统挂载到rootfs的地方)
【2】内核调试
1)点灯是用 GPIO 作为输出,观察程序运行阶段和状态的方法
2)printk
内核解压后
信息输出显示是在 console 初始化之后
printascii
console初始化前
printk打印级别:数字越低,级别越高
- #define KERN_EMERG "<0>" /* system is unusable */
- #define LERT "<1>” /* action must be taken immediately */
- #define KERN_CKERN_ARIT "<2>" /* critical conditions */
- #define KERN_ERR "<3>" /* error conditions */
- #define KERN_WARNING "<4>" /* warning conditions */
- #define KERN_NOTICE "<5>" /* normal but significant condition */
- #define KERN_INFO "<6>" /* informational */
- #define KERN_DEBUG "<7>" /* debug-level messages
ubuntu系统:
通过proc在运行时查看和修改日志级别
cat /proc/sys/kernel/printk
4 4 1 7
echo “7 4 1 7” >/proc/sys/kernel/printk
cat /proc/sys/kernel/printk
7 4 1 7
3)OOPS
pc寄存器保存内核崩溃时,运行的地址
定位 系统崩溃时的地址
linux@ubuntu:~/work/day_2/linux-3.14-fs4412$ arm-none-linux-gnueabi-addr2line 0xc0278e1c
-e vmlinux -f
指定定位镜像文件 指定出错的文件以及行号
dm9000_probe
/home/linux/work/day_2/linux-3.14-fs4412/drivers/net/ethernet/davicom/dm9000.c:1414
调试信息一般显示在两个地方 :终端、log日志
klogd进程:执行系统调用,去访问内核的打印消息
syslog进程:记录非内核打印的消息
void openlog(const char *ident, int option, int facility);
功能:打开日志
参数:ident 日志的标志
option LOG_PID Include PID with each message. 打印的消息附加上进程ID
把消息显示到log日志
facility 表示的是消息出自于什么类型的进程
LOG_DAEMON system daemons without separate facility value
void syslog(int priority, const char *format, ...);
功能:将消息显示到日志中
参数:priority 级别
LOG_WARNING warning conditio
LOG_INFO informational message
LOG_DEBUG debug-level message
void closelog(void);
功能:关闭日志
查看日志消息: var/log/syslog日志
【3】文件系统
文件系统:文件存储的格式
文件系统的类型:
磁盘文件系统:驻留在磁盘上的文件系统
FAT16、FAT32、NTFS、EXT2、EXT3、EXT4
网络文件系统:可以远程访问的文件系统
nfs(network filesystem)
内存文件系统:存在内存上的文件系统
tmpfs
只读文件系统:
cramfs
根文件系统(root filesystem)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、
配置文件和其他特殊文件的地方,也可以安装各种软件包。
根文件系统是内核运行之后,加载的第一个文件系统,是其他文件系统的根,可用来挂载其他类型的文件系统,也可视其为特殊的文件系统
必须存在,不存在内核无法运行
文件系统的目录结构:
/etc 存放内核所需要的配置文件(启动文件)
====================================================================
/bin: 普通用户和root用户都能执行的基本程序
ping, mknod, mount, tar, grep, gzip, etc
/sbin: root用户能执行的基本程序
int, insmod, route, mkfs, rmmod, ifconfig
====================================================================
/usr/bin: 更多非必须的用户程序
autorun, bibtex, latex, biff, ftp, wc, whereis, whoami
/usr/sbin: 更多非必须的root工具程序
automount, httpd, in.telnetd, in.talkd, sendmail
====================================================================
/proc 挂载proc文件系统,记录进程的信息
/sys 挂载sysfs文件系统,记录内核所需的特殊文件,设备,总线等信息
/mnt 临时挂载点,挂载其他文件系统使用
/tmp 临时挂载点,挂载其他文件系统使用
====================================================================
/dev 设备节点(文件)
【4】根文件系统的制作
1)make
生成bin sbin usr/bin usr/sbin linuxrc
2)mkdir dev etc mnt proc var tmp sys root
3)/etc
inittab fstab init.d/rcS profile
inittab
|
|
fstab
|
|
init.d ---- rcS
|
|
profile
1)initab 内核在加载rootfs的时候,解析该文件
- ::sysinit:/etc/init.d/rcS 文件系统中运行第一个脚本
- :askfirst:-/bin/sh 指定脚本的类型
- ::restart:/sbin/init 文件系统运行的第一个进程(sbin/init) init=/linuxrc 守护进程
- 开启当前的shell环境,服务其他进程,打开其他进程
- ::ctrlaltdel:/sbin/reboot reboot系统重启
2)init.d/rcS
- #!/bin/sh
- # This is the first script called by init process
- /bin/mount -a 执行挂载,与之匹配的是fstab中设置好的挂载点
- echo /sbin/mdev > /proc/sys/kernel/hotplug 生效热插拔机制
- /sbin/mdev -s
3)fstab 设置不同的文件系统的挂载点
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
4)申明库文件,以及进程的路径
export HOSTNAME=farsight
export USER=root
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
嵌入式ROOTFS transplantation的更多相关文章
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— BusyBox 构建 RootFS
上一篇我们已经成功将 ARM Linux 4.7.3 的内核利用 U-BOOT 引导了起来.但是细心的你会发现,引导到后面,系统无法启动,出现内核恐慌 (Kernel Panic). 原因是找不到文件 ...
- 嵌入式 emmc 中 安装 烧录 内核 kernel,设备树 devicetree ,根文件系统 rootfs
一般调试嵌入式开发板喜欢选择 利用 TFTP 传送 内核与 设备树, 利用 nfs 加载根文件系统. uboot 环境变量 设置如下: bootargs=root=/dev/nfs rw nfs ...
- 嵌入式开发软件环境:uboot、kernel、rootfs、data布局分析
uboot+linux的整体方案 开发板的datasheet中都有详细的地址空间的划分,其中比较重要的两块是:DDR地址空间和Flash地址空间.DDR空间是系统和应用的运行空间,一般由linux系统 ...
- 制作自己的嵌入式Linux电脑_转
制作自己的嵌入式Linux电脑 http://os.51cto.com/art/201409/450334.htm 原文链接:http://blog.jobbole.com/75414/ 包含器件选择 ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- 【4412嵌入式开发板学习笔记】认识uboot
转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...
- 嵌入式Linux内核制作【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51291316 1. Linux体系结构 从整体上来分,linux可以分为User ...
- linux rootfs制作
http://blog.sina.com.cn/s/blog_6795385f01011ifg.html 作一个嵌入式Linux rootfs,并且实现 web 服务 1. 文件系统简介 •理论上说一 ...
- 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记
一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码 下载地址: http://www.boa.org/ 目前最新发行版本: 0.94.13 ...
随机推荐
- SpagoBI 教程 Lesson 2: OLAP with JPIVOT
SpagoBI Lesson 2: OLAP with JPIVOT Online Analytical Processing Online Analytical Processing (OLAP) ...
- 锐捷 Fat/Fit Ap切换
工作中要使用锐捷的AP和AC进行组网.记录一下RG-AP220-E配置成瘦AP的方法. 使用console口连接,baudrate rate: 9600, 8n1 瘦AP:console密码是ruij ...
- MyBatis整合Spring MVC
前面几篇文章已经讲到了mybatis与spring 的集成.目前主流的Web MVC框架,除了Struts这个主力外,还有Spring MVC,主要是由于 Spring MVC 配置比较简单,使用起来 ...
- e867. 获取和设置外观
To change the look and feel, you need to know the class name of the new look and feel. This example ...
- (资源)OpenStack IRC资源
OpenStack的IRC频道列表 如何在浏览器上进入OpenStack的频道(具体的频道可以参考前面的频道列表) 频道聊天日志和会议日志 这里我使用mIRC而不是浏览器接入IRC,OpenStack ...
- Winform控件学习笔记【第五天】——ListView
[第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...
- 笔记关闭fn功能
使用笔记本在vs开发中调试需要加fn+10进行调试,一点都不方便,使用fn+esc(fnLock)这个功能就可以关闭fn功能
- Linux语言设置修改乱码
1.system-config-language 命令语言改成英文.(安装yum install system-config-language) 如何系统安装后,使用的语言不是自己想要的.但是在图形 ...
- 开源项目推荐:e-example / Springboot+bootstrap + ……
前言: 我想要找一个 springboot + bootstrap 的例子介绍,然后搜索到了这个开源项目. 所有能跑起来的项目都有研究价值,看看这个项目的文档.目前正好满足我想要的功能.推荐 正文: ...
- 全新WayOS 配置文件保存工具支持蓝色界面路由版本
一直以来都有群里的朋友要求我弄一个支持蓝色界面路由的参数备份工具,也一直拖了大半年 昨天忙到4点多,早上又因为一些小的BUG被用户电话叫起,干脆就帮你们整一个这个工具了 功能还是一样,支持各种参数的保 ...