喏,这个是基于x210文件系统的制作过程学习哦!
笔记依然是自己一个字一个字手打的=.=
想要机酱的Ubuntu环境的话,往后我会把Vmware的克隆包链接丢上来的

授课老师:朱有鹏
听课辣鸡:宕机酱

嘻嘻

======================================================

//注意:zhulaoshi使用的zImage是人家自己制作之后的
//我自己做的时候使用了九鼎移植之后的zImage,确定有实验现象。
//ubuntu: /root/driver 目录下,由x210kernel.tar.bz2
//windows: D:\fastboot\Kimo\zImage

//自己制作的根文件系统:/root/rootfs_stu/Kimo_rootfs

//我们根文件系统的位置:/root/rootfs_stu/rootfs

【什么是挂载嘿?】

譬如我们说“把我们制作的rootfs.ext2挂载到rootfs目录下去”
就是将rootfs.ext2文件 以 窗口化的方式打开,让我们方便的去访问他

======================================================

2.18.3.2、动手制作ext3格式的根文件系统

(1)创建rootfs.ext2文件并且将之挂载到一个目录下方便访问它
《参考资料:http://blog.csdn.net/zhengmeifu/article/details/24174513》

> dd if=/dev/zero of=rootfs.ext2 bs=1024 count=2048 //制作2M大小的空文件
> losetup /dev/loop1 rootfs.ext2 //
> mke2fs -m 0 /dev/loop1 2048 //这一步注意要看到3个完成
> mount -t ext2 /dev/loop1 ./rootfs/ //ext3不行,报错,做ext2吧

//这一步就是把我们制作的ext2挂载到rootfs目录下去。
//进入到rootfs就相当于进入到rootfs.ext2里面来。

消除错误影响:

umount /dev/loop1
losetup -d /dev/loop1

(2)我们向镜像中写入一个普通文件linuxrc。这个文件就会成为我们制作的镜像中的/linuxrc。内核挂载了这个镜像后就会尝试去执行/linuxrc。然后执行时必然会失败。我们将来实验看到的现象就应该是:挂载成功,执行/linuxrc失败。
touch linuxrc //注意这是个空的普通文件

(3)将来真正去做有用的rootfs时,就要在这一步添加真正可以执行的linuxrc程序,然后还要添加别的/lib目录下的库文件,/etc目录下的配置文件等。

(4)卸载掉,然后镜像就做好了。

umount /dev/loop1
losetup -d /dev/loop1

当我卸载了之后,进入rootfs/就什么都看不到了,因为里面的东西就已经拿走了

======================================================

2.18.3.3、烧录制作的rootfs.ext3

(1)烧录过程参考裸机中第三部分的刷机过程。注意bootargs传参设置

> fastboot flash system Kimo\rootfs.ext2 set bootargs
> console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc
> rootfstype=ext2

======================================================

2.18.3.4、分析和总结

======================================================

2.18.4.nfs方式启动自制简易文件夹形式的rootfs
2.18.4.1、什么是nfs
(1)nfs是一种网络通讯协议,由服务器和客户端构成。
(2)nfs的作用。利用nfs协议可以做出很多直接性应用,我们这里使用nfs主要是做rootfs挂载。开发板中运行kernel做nfs客户端,主机ubuntu中搭建nfs服务器。在主机ubuntu的nfs服务器中导出我们制作的文件夹形式的rootfs目录,则在客户端中就可以去挂载这个文件夹形式的rootfs进而去启动系统。
注意:NFS,他在menuconfig中认为是一种文件系统
(3)搭建nfs服务器。

【搭建nfs服务器】
一 安装 NFS

> $ sudo apt-get install nfs-kernel-server
> $ sudo apt-get install nfs-common

二 配置/etc/exports
$ sudo vi /etc/exports
文本末添加
/root/rootfs_stu/rootfs *(rw,sync,no_root_squash,no_subtree_check)

然后在终端执行 chmod777−R/root/rootfschmod 777 -R /root/rootfs sudo showmount -e
显示 clnt-create : RPC : Program not registered
sudoexportfs−r更新 sudo exportfs -r 更新 sudo showmount localhost -e
显示
Export list for 192.168.1.116
/root/rootfs *
三 启用
$ sudo /etc/init.d/nfs-kernel-server restart 重启 nfs 服务
显示如下
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon… [ OK ]
* Exporting directories for NFS kernel daemon… [ OK ]
* Starting NFS kernel daemon [ OK ]

【挂载测试】
$ mount -t nfs -o nolock localhost:/root/rootfs_stu/rootfs /mnt
执行后,进入/mnt 目录中,如果可以看到/root/rootfs 中的内容,则说明 nfs 搭建成功!

mount -t nfs -o nolock 192.168.2.100:/root/rootfs_stu/rootfs /opt
//这样就把rootfs文件夹 以 NFS的方式挂载到了/opt下。
//在opt中的操作就是在rootfs中的操作。

//注意最好不要挂载在/mnt目录下。最好在opt或者tmp下
//用了mnt就会导致共享文件夹不能使用。

【卸载】
======================================================

2.18.4.2、配置内核以支持nfs作为rootfs

默认在kernel中是不支持NFS的
[ 2.954321] VFS: Cannot open root device “nfs” or unknown-block(0,255)
我们在此要做的就是

1 make menuconfig
2 重新编译内核,得到zImage
3 烧录,测试结果

【重要的事说三遍!!注意改虚拟网络编辑器!要连接本地才行,还有要插网线,老朱都没说】
【挂载在开发板上就是用bootargs去传参启动,最好先ping通然后做。】
【注意,在虚拟网络编辑器中设置本地,桥接,这种情况不能使用SecureCRT】

(1)设置nfs启动方式的bootargs

【NFS方式启动的bootargs】 【注意!需要手动修改】
setenv bootargs root=/dev/nfs nfsroot=192.168.2.100:/root/rootfs_stu/rootfs ip=192.168.2.233:192.168.2.100:192.168.2.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

代码解读:
//根文件系统在:/dev/nfs
//nfsroot=192.168.1.141:/root/s3c2440/build_rootfs/aston_rootfs
linux的地址 主机的目录
//ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off
开发板ip: 主机ip : 网关 : 子网掩码:主机网卡:off

(2)在menuconfig中配置支持nfs启动方式

1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
Networking support
Networking options
TCP/IP networking
IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support

2、配置开启nfs服务
File systems —>
Network File Systems —>
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] NFS client support for NFS version 4 (EXPERIMENTAL)
[*] NFS client support for NFSv4.1 (DEVELOPER ONLY)
[*] Root file system on NFS

3、在uboot中设置如下启动参数(IP根据实际使用更改)
setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

做完这个的现象应该是:挂载rootfs成功,linuxrc失败。

[ 5.587480] VFS: Mounted root (nfs filesystem) on device 0:12.
[ 5.591925] Freeing init memory: 540K
[ 5.618933] Failed to execute /linuxrc. Attempting defaults…

2.18.4.3、总结
(1)nfs方式启动相当于开发板上的内核远程挂载到主机上的rootfs
(2)nfs方式启动不用制作rootfs镜像
(3)nfs方式不适合真正的产品,一般作为产品开发阶段调试使用

======================================================

19.1 根文件系统的构建路线
busybox 实战 与 代码详解
etc目录
inittab 让系统启动,就可以使用根文件系统了
先逐步构建文件夹形式的根文件系统再制作烧录镜像
rootfs的两种表现形式:
1 nfs启动的文件夹形式的rootfs
2 用来烧录的镜像形rootfs

每做一步就用NFS去挂载,观察启动后的现象,然后理论分析原因。
培训机构:就是照着去做

======================================================

19.2busybox源码移植
1 busybox是一个开源项目,可以直接下载。 百度busybox下载
busybox也是从linux内核中抄来的,两者相似度比较高

2 解压到我们的rootfs目录下,创建Kimo_rootfs
然后解压
3 修改Makefile
CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
ARCH = arm

4 make menuconfig配置
//不用像内核中make defconfig那样需要很多的配置

Busybox Settings—>
Build Options—>
[*]Build BusyBox as a static binary(no shared libs)

Busybox Library Tuning—>
[*]vi-style line editing commands
[*]Fancy shell prompts

Linux Module Utilities—>
[ ]Simplified modutils
[*]insmod
[*]rmmod
[*]lsmod
[*]modprobe
[*]depmod

Linux System Utilities—>[*]mdev
[*]Support /etc/mdev.conf
[*]Support subdirs/symlinks
[*]Support regular expressions substitutions when renaming dev
[*]Support command execution at device addition/removal
[*]Support loading of firmwares

5 make -j4,没有错误后make install
(我们出现了一个错误sync.c:(.text.sync_main+0x78): undefined reference to `syncfs’)
(make install实际上是在执行 busybox顶层目录的 install)
./include/config/feature/install
./include/config/install

make install在所有的linux下的软件中作用都是安装软件。在传统的linux系统中安装软件时都是选择源代码方式安装的。我们下载要安装的软件源代码,然后配置、编译、安装。
这里的“安装”就是make install
make install的目的就是将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定(一般都可以自己指定安装到哪个目录下,如果不指定一般都有个默认目录)的目录下

6 解决当前错误:
sync.c:(.text.sync_main+0x78): undefined reference to `syncfs’
//这个错误很可能是gcc和当前busybox版本不兼容造成的。
我们对于安装或者配置中出现的错误,通常有2种解决方式:
1 尝试去源代码中解决他
2 在编译 的 时候尝试避开他(很可能是我们用不着的程序我们可以这么玩)
怎么做?
我们去找到这个sync.c,在他的目录下寻找makefile,没有= =
但是有Kbuild!在Kbuild将 lib+= sync.o 一项,可以看到config的选项
lib-$(CONFIG_SYNC) += sync.o
我们要找的是 SYNC 宏
去menuconfig中 /,搜索SYNC,就找到了。禁用sync即可
3 make -j4解决。

7 make install
默认安装目录:./_install
里面有4个文件: bin linuxrc sbin usr
ls -l可以看到:
linuxrc -> bin/busybox//这个linuxrc其实就是个符号链接
bin里面的所有符号链接,全都指向busybox!

8 改变我们的根文件 系统目录
make menuconfig
Busybox Settings —>
Installation Options (“make install” behavior) —>
点进去,改成我们将要用作NFS挂载的目录
/root/rootfs_stu/rootfs
make -j4
make install

9 检查网络配置,重新启动(busybox成功了,但仍然存在问题)
/ # //至此命令行加载成功了,VFS挂载成功,未提示linuxrc错误
can’t run /etc/init.d/rcS//!问题1:我们的根文件系统
cant open tty234//!问题2:打印错误信息!不致命,后面解决

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
停止!听课到19.2的 34分钟处,我们安装完成了。下一步我们去做实验挂载
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

我们默认的busybox 在 make install之后生成在busybox文件夹的_install目录中,里面有
linxurc、sbin、bin、usr等,cd到任何一个子目录,里面有大量的如cat、dd、df、chmod等“符号链接”
这些符号链接ls -l都指向了busybox这个文件。可见busybox是一个万花筒

======================================================

19.3 添加inittab

inittab里面有一些奇奇怪怪的文字,我们要将其添加到/etc中去

1 mkdir etc
2 在etc中添加inittab

3 再次启动开发板,提示“按回车键使能控制台”

【最小根文件系统】
我们做到这里已经能使用ls查看/目录下的文件了,至此最小根文件系统能用了,包括:
busybox
inittab

【inittab格式解析】 详情:百度busybox inittab

id:runlevels:action:process//注意有些配置值可以省缺,但“:”不能省
(重要) !#关键:由进程1反复检查:当满足“action”条件时,就执行process这个程序

#first:run the system script file
::sysinit:/etc/init.d/rcS
//在控制台初始化之前执行rcS
::askfirst:-/bin/sh//执行控制台时的打印信息
::ctrlaltdel:-/sbin/reboot//同时按住3键可以重启
#umount all filesystem
::shutdown:/bin/umount -a -r//关机时接触挂载//重启时启动init
#restart init process
::restart:/sbin/init
> # 注释(linux中的习惯性思维)
> : 分隔符,每行代表一个独立的含义
> / 目录

inittab 的 工作原理就是被/linuxrc(也就是busybox,以后不说linuxrc了)执行时所调用起作用。
该文件在/etc下,属于“运行时配置文件”。内容由文本组成。我们研究的重点是如何修改他。

一个文件也可以是一个程序,脚本就是一个程序。

分析过busybox源码会知道:
我们的busybox就是init进程,即进程1,busybox最终会进入一个死循环。
在这个while(1)中会反复检查是否满足“action”的各个条件,满足之后就会执行相应的process
因此在OS运行的过程中,inittab是反复在使用、一直在运行的。进程1一直在检查action是否满足。

action举例:
respawn 若死复活,如果process进程不存在,则启动该进程。有点像守护进程
wait busybox是一个个来扫描的,等上面的结束才开始这一个
once 普通状况(只用一次,死了就死了)
sysinit 在控制台初始化之前执行

Please press Enter to activate this console.
//这句话,是用askfirst产生的,在inittabel里。‘’

======================================================

19.4 busybox源码分析

busybox的总入口
main函数有好多,起作用的只有一个,即Appletlib.c中的main()
libbb/Appletlib.c
其余的都不会被链接,因为main只能有一个

命令的入口
busybox有很多xxx_main,这是支持的命令的真正入口

busybox如何用一个程序实现了万千程序?
ls、cd等都是busybox,是因为main转xxx_main
在main中识别真正要执行的命令,然后去调用xxx_main来具体实现。
识别不同的命令其实就是argv[0]

在Init.c中有init_main(),inittab用的

======================================================

2.19.5.busybox源码分析2

2.19.5.1、inittab解析与执行
(1)inittab的解析是在busybox/init/init.c/init_main函数中
(2)执行逻辑是:先通过parse_inittab函数解析/etc/inittab(解析的重点是将inittab中的各个action和process解析出来),然后后面先直接执行sysinit和wait和once(注意这里只执行一遍),然后在while(1)死循环中去执行respwan和askfirst。

2.19.5.2、pwd命令执行路径分析
(1)根据上节讲的,我们在busybox命令行下执行pwd命令时实际执行的是pwd_main这个函数。

2.19.5.3、busybox的体积优势原理
(1)busybox实际上就是把ls、cd、mkdir等很多个linux中常用的shell命令集成在一起了。集成在一起后有一个体积优势:就是busybox程序的大小比busybox中实现的那些命令的大小加起来要小很多。
(2)busybox体系变小的原因主要有2个:第一个是busybox本身提供的shell命令是阉割版的(busybox中的命令支持的参数选项比发行版中要少,譬如ls在发行版中可以有几十个-x,但是在busybox中只保留了几个常用的选项,不常用的都删除掉了);第二个是busybox中因为所有的命令的实现代码都在一个程序中实现,而各个命令中有很多代码函数都是通用的(譬如ls和cd、mkdir等命令都会需要去操作目录,因此在busybox中实现目录操作的函数就可以被这些命令共用),共用会降低重复代码出现的次数,从而减少总的代码量和体积。
(3)经过分析,busybox的体积优势是嵌入式系统本身的要求和特点造成的。

2.19.6.rcS文件介绍1
2.19.6.0、/etc/init.d/rcS文件是linux的运行时配置文件中最重要的一个,其他的一些配置都是由这个文件引出来的。这个文件可以很复杂也可以很简单,里面可以有很多的配置项。
2.19.6.1、PATH=xxx
(1)首先从shell脚本的语法角度分析,这一行定义了一个变量PATH,值等于后面的字符串
(2)后面用export导出了这个PATH,那么PATH就变成了一个环境变量。
(3)PATH这个环境变量是linux系统内部定义的一个环境变量,含义是操作系统去执行程序时会默认到PATH指定的各个目录下去寻找。如果找不到就认定这个程序不存在,如果找到了就去执行它。将一个可执行程序的目录导出到PATH,可以让我们不带路径来执行这个程序。
(4)rcS中为什么要先导出PATH?就是因为我们希望一旦进入命令行下时,PATH环境变量中就有默认的/bin /sbin /usr/bin /usr/sbin 这几个常见的可执行程序的路径,这样我们进入命令行后就可以ls、cd等直接使用了。
(5)为什么我们的rcS文件还没添加,系统启动就有了PATH中的值?原因在于busybox自己用代码硬编码为我们导出了一些环境变量,其中就有PATH。到底是那个PATH起作用?(是源码中的还是rcS中的?)这个问题要实际看代码,我们最好是屏蔽其中的一个看实验现象,因此不需要深究。

2.19.6.2、runlevel=
(1)runlevel也是一个shell变量,并且被导出为环境变量。
(2)runlevel这个环境变量到底有什么用?
(3)runlevel=S表示将系统设置为单用户模式

2.19.6.3、umask=
(1)umask是linux的一个命令,作用是设置linux系统的umask值。
(2)umask值决定当前用户在创建文件时的默认权限。

2.19.6.4、mount -a
(1)mount命令是用来挂载文件系统的
(2)mount -a是挂载所有的应该被挂载的文件系统,在busybox中mount -a时busybox会去查找一个文件/etc/fstab文件,这个文件按照一定的格式列出来所有应该被挂载的文件系统(包括了虚拟文件系统)

======================================================

19.7 操作!

【rcS文件】

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/new
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
(后面还有几行老师给删掉了,但我没有,所以会有一个HOSTNAME报错,除此都正确了)

【本节实验操作】
1 复制rcS文件到 /root/rootfs_stu/rootfs/etc/init.d/
修改rcS里面的 ifconfig eth0 //修改的ip是开发板的 注意!不改NFS失效

去掉结尾的^M //不删除会因格式不对提示没有rcS
//扩展:有时候没有动态链接库也提示如此
此时启动,发现打印
can’t run ‘/etc/init.d/rcS’: Permission denied
提升rcS的权限:chmod 777 rcS

此时启动,发现打印

mount: mounting proc on /proc failed: No such file or directory
mount: mounting sysfs on /sys failed: No such file or directory
mount: mounting tmpfs on /var failed: No such file or directory
mount: mounting tmpfs on /tmp failed: No such file or directory
mount: mounting tmpfs on /dev failed: No such file or directory
/etc/init.d/rcS: line 13: can’t create /proc/sys/kernel/hotplug: nonexistent directory
mdev: can’t change directory to ‘/dev’: No such file or directory
hostname: can’t open ‘/etc/sysconfig/HOSTNAME’: No such file or directory

原因是因为根文件系统中找不到挂载点。所谓挂载点就是我们要将目标文件系统(当然这里都是虚拟文件系统)挂载到当前文件系统中的某一个目录中,这个目录就是挂载点。

【解决方案】就是自己在制作的rootfs根目录下创建这些挂载点目录即可。

唯独剩下一个
hostname: can’t open ‘/etc/sysconfig/HOSTNAME’: No such file or directory

2 复制fstab到 /root/rootfs_stu/rootfs/etc/下

3 测试PATH&runlevel
PATH本来在busybox中就已经用代码导出过了
busybox并不支持runlevel这个特性

4 umask测试
(1)umask是022的时候,默认touch创建一个文件的权限是644
(2)umask是044的时候,默认touch创建一个文件的权限是622
(3)umask是444的时候,默认touch创建一个文件的权限是222

5 mount测试
验证是否挂载成功,可以看挂载时输出信息;
还可以 启动后去看proc和sys文件夹,如果有文件出现则证明挂载成功了
如果没东西就证明失败了

这些文件在开发板中有,但是linux主机服务器中是ls不到的
这些意义暂时不讲,在驱动中会用到的。
“挂载”这个东西以后会很常用,所以现在不急着用。

======================================================

19.8 12分钟,听到mdev和hostname

【进化版rcS】

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/new
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -aecho /sbin/mdev > /proc/sys/kernel/hotplug //输出重定位到hotplug里
mdev -s
/bin/hostname -F /etc/sysconfig/HOSTNAME //用文件设置主机名。-F设置 主机名配置文件
ifconfig eth0 192.168.0.233

【mdev】
(1)mdev是udev的嵌入式简化版本,udev/mdev是用来配合linux驱动工作的一个应用层的软件,udev/mdev的工作:配合linux驱动生成相应的/dev目录下的 设备文件。
(因为这个问题涉及到驱动,以后讲)

用处现象:
在rcS文件中,没有mdev 命令配置时,/dev/下是没有东西的
在rcS中加入了 mdev -s两句后,dev/目录下有很多生成的设备驱动文件。
这就是mdev的效果和意义。

【hostname】
hostname 是shell命令,hostname xxx执行后可以设置当前主机名为xxx
1 根据/bin/hostname -F /etc/sysconfig/HOSTNAME,在etc下创建sysconfig
2 在sysconfig/下 创建 HOSTNAME,直接输入主机名
3 重启,发现没有显示 用户名和hostname
4 添加profile文件,下节课讲。

//注意:不设置HOSTNAME,默认的是一个ip地址,在我实验的时候是
192.168.0.233

【ifconfig】
ifconfig eth0 192.168.0.233 //我们希望开机后就指定ip地址。
设置一个ip地址。
我们在ifconfig查看的时候ip地址是bootargs得到的,为开发板设置的ip地址。
如若我们想更改,直接ifconfig eth0 192.168.0.233

======================================================

19.9 profile文件和用户登录

我们需要支持用户登录。

【profile文件添加,显示当前登录hostname】
之前添加了一个有主机名的HOSTNAME文件(在rcS中有引入)
这个文件也是从profile来的,放到etc目录下,重启开发板即可。

命令行出现hostname前缀!
[@Kimo210 ]#

【用户登录实现】
linux中有个原则:用一个小程序来实现一个功能。不要把程序 写的特别大。
如果我们的产品确实需要很复杂的综合功能,那么需要吧小程序集成起来,比如shell脚本。

【第一次使用命令行:在inittab中,::askfirst:-/bin/sh

执行了这一句就会直接进入命令行,所以我们要写的登录界面要在这之前,不应该直接执行sh
busybox里集成了这样的程序,就是
/bin/login
/sbin/gettty
因此我们要在inittab要用这两个去代替::askfirst:-/bin/sh
修改: s3c2410_serial2::sysinit:-/bin/login
注释掉::askfirst:-/bin/sh
注意:此处的“s3c2410_serial2”是选择串口2做为tty,在/dev中有这个文件

linux常用的所有的用户名和密码管理几乎是完全一样的。我们回头就从ubuntu移植一个过去。
系统中的密码肯定是在系统中的一个专门用来存密码的文件中存着。有存明文、密文的区别。
明文的风险比较大,密文则经过加密,安全性会高一些。
CSDN当年出了一个事,服务器被攻破了,结果用户的账号密码都是明文存储的,GG
我们会用密文密码来登录。

======================================================

19.10 密文加密用户登录实战:实际项目中是经常遇到的

1 添加/bin/login到sysinit
在inittab中修改,去掉/bin/sh,换上/bin/login
系统启动后出现登录界面。可以输入用户名和密码。
但是死活密码不对。

为什么用户名和密码不对?因为我们根本没有为root用户设置密码。
描述用户名和密码的文件是passwd和shadow文件,这两个文件都在etc目录下

2添加passwd和shadow文件
我们直接复制ubuntu系统中的/etc/passwd和/etc/shadow文件!
到当前制作的rootfs目录下,然后再做修改即可

passwd:存储的是用户密码设置,里面有一些远程登录的,不太需要懂
eg:root:x:0:0:root:/root:/bin/bash
//这里的“x”代表用shadow文件加密的密文密码
//如果不是“x”或者“ * ”,则使用明文密码

root:/root:/bin/bash
//这个“/root”是当前用户的home目录,也即是主目录
///bin/bash是默认脚本

shadow:存放的是密文密码
eg:root:6<script type="math/tex" id="MathJax-Element-3">6</script>KUZaBSKo$jBKZqgdqoiH283R18bK7kGwtzDe6AYSvVxT.7p
这就是加密之后的密文密码

3 修改passwd和shadow
修改1:要为root用户创建一个/root目录
修改2:把其他非root用户的信息全删除
修改3:在passwd中把默认脚本改为sh(ubuntu中默认是bash,busybox不支持)

—<到这里我们就可以用root登录了,密码和ubuntu的一样是3733>
打印信息:
Please press Enter to activate this console.
Kimo210 login: root
Password:
login[56]: root login on ‘console’
[root@Kimo210 ~]#

【重置密码实践】
(1)ubuntu刚装好的时候默认登录是用普通用户登录的,默认root用户是关闭的。普通用户的密码是在装系统的时候设置的,普通用户登陆后可以使用su passwd root给root用户设置密码,设置了密码后root用户才可以登录。
(2)其实这个原因就是root用户在/etc/shadow文件中加密口令是空白的。所以是不能登录的。
(3)busybox中因为没有普通用户,所以做法是:默认root用户如果加密口令是空的则默认无密码直接登录。等我们登陆了之后还是可以用passwd root给root用户设置密码。
passwd root
3733
3733
提示OK
(4)平时有时候我们忘记了自己的操作系统的密码,怎么办?怎么破解密码?
有一种解决方法就是用其他系统(WindowsPE系统或者ubuntu的单用户模式等···)来引导启动,启动后挂载到我们的硬盘上,然后找到/etc/shadow文件,去掉密文密码后保存。然后再重启系统后密码就没了。

【getty】
后面做项目会发现,inittab中最常见的用于登录的程序不是/bin/login,反而是/sbin/getty。
这两个的差别不详,但是在busybox中这两个是一样的。
我们可以在inittab中用getty替换login程序来实现同样的效果。

但要在inittab中改成:
s3c2410_serial2::respawn:/sbin/getty -L s3c2410_serial2 115200 vt100
串口格式样式

【笔记】嵌入式根文件系统制作随堂笔记相关推荐

  1. 嵌入式根文件系统制作

    1:文件系统分类:    基于flash的文件系统:flash有两种,一种是NOR,另一种NAND.NOR型 FLASH主要用于存放程序.NAND型 FLASH主要用于存放数据.NOR的特点是可在芯片 ...

  2. 嵌入式linux启动根文件系统,嵌入式Linux根文件系统制作和挂载

    嵌入式Linux系统由三部分组成: uboot.kernel.根文件系统, 还是这张老图 这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统 那么什么是根呢?哈哈 其实根表示的就是第一个 ...

  3. 嵌入式Linux根文件系统制作

    嵌入式Linux根文件系统制作 一.根文件系统简介 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的 ...

  4. 嵌入式Linux内核以及根文件系统制作

    内核制作 注意: 我测试的使用nandflsh中bootloader启动,sd卡bootloader启动有问题 制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致. 清除原 ...

  5. Linux内核移植和根文件系统制作(详细步骤精讲)

    第一章移植内核 1.1 Linux内核基础知识 1.1.1 Linux版本 1.1.2 什么是标准内核 1.1.3 Linux操作系统的分类 1.1.4 linux内核的选择 1.2 Linux内核启 ...

  6. 根文件系统制作一制作根文件系统树

    完成了u-boot移植后就是内核移植然后是根文件系统制作,这次分为这几部分书写:根文件系统树.文件系统initramfs.jaffs2.ubifs 有必要了解一些存储系统和文件系统的知识 Norfla ...

  7. Linux-2.6.32.2内核在mini2440上的移植(四)---根文件系统制作(1)

    移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存. 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linu ...

  8. JFFS2根文件系统制作

    一.根文件系统简介 根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如inittab.rcS)和 ...

  9. 根文件系统制作与NFS挂载

    一:busybox: 1.完整的操作系统=bootloader(u-boot)+kernel(zImage)+根文件系统. 2.根文件系统的核心就是  各种以及系统运行配置参数(类似于linux的cd ...

最新文章

  1. spring冲刺第一天
  2. 回文java_回文 Java
  3. NetBeans安装提示neatbeans cannot find java 1.8 or higher
  4. 协程(Coroutine)与多线程,多进程
  5. oracle bookauthor,Oracle 聚簇(征集)
  6. 漫谈 Clustering (2): k-medoids
  7. 北京自贸区国际商务服务片区挂牌 总面积48平方公里
  8. php 检测硬盘,php测试硬盘读写速度脚本
  9. C++ atuo关键字看这一篇就够了
  10. html怎样在雪景里插入文字,配雪景的唯美文字
  11. 读书笔记:《巴菲特投资成功的七大秘诀》
  12. git报错would clobber existing tag
  13. (57)Linux驱动开发之三Linux字符设备驱动
  14. 瑞利分布(Rayleigh Distribution)回顾
  15. 30 分钟快速入门 Docker 教程
  16. 拓嘉启远电商:拼多多缺货会降权吗?如何处理
  17. python-某旗小说app的学习过程
  18. android 如何刷机,安卓怎么刷机_安卓刷机图解_刷机大师教程
  19. 如何快速传输大文件,介绍大文件快速方法
  20. 常用的激活函数sigmoid,relu,tanh

热门文章

  1. Spring Cloud 进阶--Rest微服务加入Eureka服务注册与服务发现(单机版)
  2. v-for动态图片列表展示以及动态给div添加背景图片
  3. 教育大数据总体解决方案(3)
  4. java实现读取txt文件和将内容写入txt文件
  5. setAttribute总结
  6. Android 解决大字体模式下页面变形的问题
  7. 批处理Batch学习
  8. pyTorch——基础学习笔记
  9. 自考总结——(第四次)
  10. python炫酷烟花表白源代码,python 实现漂亮的烟花