程序文件目录
/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
配置基本的linux命令(嵌入式linux通过busybox制作)
cat, chmod, chown, cp, chroot, copi, date, dd, df, dmesg, dos2unix, du, echo, env, expr, find, grep, gunzip, gzip, halt, id, ifconfig, init, insmod等等
配置用户自己的应用
桌面管理器等等
/lib: 系统和运行基本命令时需要的动态库文件
/usr/lib:所有的其他库
/usr/lib/xxx: 一些工具包的私有库
如:/usr/lib/perl5
ls –l /dev/“c” 指明该设备节点是字符设备
crw-rw---- 1 root uucp 4, 64 Feb 23 2004 /dev/ttyS0 //4表示主设备号,64表示次设备号
crw--w---- 1 jdoe tty 136, 1 Feb 23 2004 /dev/pts/1
crw-------- 1 root root 13, 32 Feb 23 2004 /dev/input/mouse0
crw-rw-rw 1 root root 1, 3 Feb 23 2004 /dev/null
典型设备
keyboards, mice, parallel port, IrDA, Bluetooth port, consoles, terminals, sound, video…
“b” 指明该设备节点是块设备 (ls -l)
brw-rw--- 1 root disk 3, 1 Feb 23 2004 hda1
brw-rw--- 1 jdoe floppy 2, 0 Feb 23 2004 fd0
brw-rw--- 1 root disk 7, 0 Feb 23 2004 loop0
brw-rw--- 1 root disk 1, 1 Feb 23 2004 ram1
brw------- 1 root root 8, 1 Feb 23 2004 sda1
典型块设备
磁盘, ramdisk,SD,U盘等等
设备文件不能在加载驱动程序时自动创建,要通过指令创建
创建设备文件的一般语法:
$ mknod /dev/ [c|b]
例如:
$ mknod /dev/ttySAC0 c 4 64
$ mknod /dev/hda1 b 3 1
linux@linux:~$ cp /mnt/hgfs/Linuxsharexiaomei/busybox-1.22.1.tar.bz2 .
linux@linux:~$ tar -vxf busybox-1.22.1.tar.bz2
linux@linux:~$ cd busybox-1.22.1/
$ make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
(arm-none-linux-gnueabi-) Cross Compiler prefix 注意 一定要指定交叉编译工具
$ make
$ file busybox 确认编译生成的是 ARM 平台的(显示为ELF 32-bit LSB executable, ARM)
$ make install 安装(默认安装路径为_install)
$ cd _install
$ ls
bin linuxrc sbin usr
$ mkdir dev etc mnt proc var tmp sys root 创建需要的目录
$ cp ~/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a 注意是lib/
$ du -mh lib 查看lib库的大小
$ rm lib/*.a 裁剪,删除掉静态库文件
$ arm-none-linux-gnueabi-strip lib 裁剪掉调试信息 not recognized 有些库是不能strip的 忽略掉
$ sudo rm lib/libstdc++* 删除不需要的库,确保所有库大小不超过4M
$ du -mh lib 查看lib库的大小 可能 显示3.4M lib (这里确保小于 8M)
$ cp /nfs/rootfs/etc -rf . 拷入成熟的参考配置
$sudo mknod dev/console c 5 1 必须要有 console设备节点
看新的根文件系统能否正常挂载到开发板
linux@linux:~/busybox-1.22.1$ mv /nfs/rootfs /nfs/rootfs.ok 把原有的根文件系统备份一下
linux@linux:~/busybox-1.22.1$ sudo cp -rf _install /nfs/rootfs 把新的根文件系统拷贝过去(改名rootfs)
#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS 指定系统初始化脚本是rcS 也可指定别的名字,但习惯用rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh 指定初始的控制台(启动后进入# 状态)
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
#!/bin/sh
# This is the first script called by init process
/bin/mount -a mount all stuff from /etc/fstab
/etc/init.d/rc.local 扩展子脚本
echo /sbin/mdev > /proc/sys/kernel/hotplug 设置系统的hotplug程序为mdev
/sbin/mdev -s
./app.exe //让脚本自动运行你的程序
#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
#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
export PS1="[$USER@$HOSTNAME \W]\# " 终端前的提示符
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
$ cd /nfs
$ mkdir rootfs
$ cp _install/* rootfs –a
$ chmod 777 /nfs/rootfs/
NFS能挂载成功表示根文件系统 内容基本正确
是网络文件文件系统,通过网线远程挂载一个文件系统,文件系统在远程的电脑上。最大的好处是同步,主要用于开发调试
只读,不能写。安全性高,某些区域的数据不能改,就可以定义为CRAMFS。
可读,可写,针对都是flash。JFFS2在小型应用系统用的比较多。JFFS2有一个特点:是一个日志文件系统,用的过程中可以随时掉电。YAFFS2只能针对Nand flash,手机中用的最多的是Nand flash,文件系统就是YAFFS2
把一块内存虚拟成为一个磁盘。内存只能按地址空间像一个buffer一样访问,当应用产品内存比较大而flash比较小时,就可以按这种格式把一块内存虚拟成为一个磁盘
linux@linux:~$ dd if=/dev/zero of=ramdisk bs=1k count=8192
if :(input file)输入文件
/dev/zero :是一个虚拟的设备,从这个设备中读到的数据全是0
of :(output file)输出文件
bs=1k count=8192: 单元大小是1k,数量是8k,就是8M大小
linux@linux:~$ mkfs.ext2 -F ramdisk
linux@linux:~$ sudo mkdir /mnt/initrd
注意这里的ramdisk不能存放在rootfs目录中
linux@linux:~$ sudo mount -t ext2 ramdisk /mnt/initrd
将测试好的文件系统里的内容全部拷贝到/mnt/initrd目录下面
linux@linux:~$ sudo cp /nfs/rootfs/* /mnt/initrd/ -a
linux@linux:~$ sudo umount /mnt/initrd
linux@linux:~$ gzip --best -c ramdisk > ramdisk.gz
linux@linux:~$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
linux@linux:~$ cp ramdisk.img /tftpboot/
制作完ramdisk.img后,需配置内核支持RAMDISK作为启动文件系统
make menuconfig
File systems --->
<*> Second extended fs support
Device Drivers --->
SCSI device support --->
<*> SCSI disk support
[*] Block devices --->
<*> RAM block device support
(16) Default number of RAM disks
(8192) Default RAM disk size (kbytes) (修改为8M)
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
重新编译内核,复制到/tftpboot
https://blog.csdn.net/m0_37542524/article/details/86485905#231_110