嵌入式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 ...
随机推荐
- Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...
- Python之使用PIL实现cv2
有时候使用cv2需要安装opencv,但是opencv安装比较麻烦,因为需要编译过程. 所以,我们可以使用PIL对cv2的一些常用接口进行复现. 这里我们实现了cv2的imread(), imwrit ...
- (笔记)Mysql实例:建库建表并插入数据2
drop database if exists school; // 如果存在SCHOOL则删除create database school; // 建立库SCHOOLuse school; / ...
- e807. 设置进程监听对话框的延迟弹出
By default, the progress monitor delays for a short period before it is displayed. There are two pro ...
- C# 各种输入格式验证#各种输入格式验证
/// <summary> /// 各种输入格式验证 /// </summary> public class ValidateUtil { private static Reg ...
- IntelliJ IDEA 终极破解
1. 下载破解补丁(JetbrainsCrack-2.6.10-release-enc.jar): http://idea.lanyus.com/jar/JetbrainsCrack-2.6.10-r ...
- iOS:DKLiveBlur
https://github.com/kronik/DKLiveBlur Sources of DKLiveBlur and Demo app to show live blur effect sim ...
- 单用户模式&救援模式&克隆虚拟机&Linux机器相互登录
1.13 单用户模式 1.14 救援模式 1.15 克隆虚拟机 1.16 Linux机器相互登录 1.单用户模式 关机:init 0 .poweroff 重启:init 6 .reboot 关机:in ...
- sar监控工具详解
转自http://www.cnblogs.com/Amaranthus/p/3745680.html SAR NAME: SAR报告,收集,保存系统活动信息 语法: sar [ -A ] [ -b ...
- Android Material Design控件学习(三)——使用TextInputLayout实现酷市场登录效果
前言 前两次,我们学习了 Android Material Design控件学习(一)--TabLayout的用法 Android Material Design控件学习(二)--Navigation ...