嵌入式驱动开发-内核、文件系统的挂载基于(exynos4412)
来源:互联网 发布:linux查看dns命令 编辑:程序博客网 时间:2024/05/16 10:43
编译步骤:
1. 建立存放busybox文件的目录。#mkdir /work/busybox -p
2. 建立编译文件存放目录。#mkdir /work/rootfs -p
3. 解压busybox-1.23.2.tar.bz2
4. 配置busybox: 配置方式 #make menuconfig
1) 配置编译器
Busybox Settings --->
Build Options --->
(arm-linux-) Cross Compiler prefix
2) 编译方式为动态库
[ ] Build BusyBox as a static binary (no shared libs) (默认为动态编译)
编译可执行文件的方式:ls , cd ,pwd。
动态编译:arm-linux-gcc 123.c -o app1
静态编译:arm-linux-gcc -static 123.c -o app2
3) 配置安装路径
Busybox Settings --->
Installation Options ("make install" behavior) --->
(/work/rootfs) BusyBox installation prefix
5. 编译源码
#make && make install
l 查看文件的运行环境
命令用法:#file <可执行文件名称或者库名称>
[root@xiaolong bin]# file busybox
busybox: ELF 32-bit LSB executable,ARM, version 1 (SYSV),dynamically linked (uses shared libs), stripped
完整根文件系统
怎么完善?PC-Linux文件系统进行完善。
l /work/rootfs
1. 完善目录:创建Linux常规目录
#mkdir lib dev etc/init.d home proc sys root opt tmp var -p
2. 拷贝系统的依赖库
依赖库的位置?Busybox是由arm-linux-gcc编译。
库的路径在arm-linux-gcc的安装目录下:
(必须)路径:/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib
(不是必须)路径:/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib
进入到库的路径下敲命令:
#cp ./* /work/rootfs/lib -fdv
将依赖库拷贝到根文件系统下的lib目录下。
拷贝过去以后,可以删除掉lib目录下以.a结尾的静态库。 比如:#rm *.a -f
3. 创建设备节点
设备节点目录?dev目录下
手动创建设备节点的命令:mknod
用法:mknod <设备节点的名称> <设备节点的类型> [主设备号 次设备号]
设备节点的类型:c -->字符设备 b--->块设备
需要创建的设备节点:
#mknod console c 5 1
#mknod null c 1 3
echo“123456799”> /dev/null
4. 拷贝密码和用户组文件
在PC机的/etc目录下拷贝passwd、group文件到开发板的/etc目录下。
修改passwd文件里/bin/bash-> /bin/sh
5. 拷贝文件系统的配置文件
将PC机/etc/fstab文件拷贝开发板的/etc目录下。
6. 拷贝终端配置文件
路径:/work/busybox/busybox-1.23.2/examples/inittab
拷贝到开发板的/etc目录下。
7. 修改inittab文件
::sysinit:/etc/init.d/rcS
console:: askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
#console::respawn:-/bin/sh
askfirst表示:进入终端需要按下回车键。
respawn表示:不需要按回车键,直接进入终端。
解析:
::sysinit:/etc/init.d/rcS :系统初始化配置文件(上电执行的文件)。
console:: askfirst:-/bin/sh:定义进入终端的模式和终端使用的脚本解析器。
::ctrlaltdel:/sbin/reboot :定义重启系统的命令
::shutdown:/bin/umount -a -r:关机之前执行的命令。 umount和mount是挂载命令。
8. 创建rcS文件
#gedit etc/init.d/rcS
#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname xyd
rcS:系统上电自动执行的文件。
mdev -s: 会根据内核的驱动自动生成对应的设备节点。
rcS文件需要修改权限:#chmod 777 rcS
9. 创建etc/profile文件
USER="`id-un`"
LOGNAME=$USER
PS1='[\u@\h \w]\# '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
1. 根文件系统的网络挂载
(1)配置NFS文件系统的共享路径 (PC机的路径)
# vim /etc/exports
填充共享的路径
/work/rootfs *(rw,no_root_squash,sync)
生效共享文件的方法
#exportfs -r //生效路径
#exportfs -v //查看已经共享的路径
(2)配置PC机的挂载环境
l 关闭防火墙
图像化配置:setup
l 配置网卡的IP
查看网卡的IP地址:ifconfig
设置网卡的IP地址:ifconfig eth0 192.168.18.3 up
重新启动NFS服务器:service nfs restart (执行两次)
l设置虚拟机网卡的挂载方式为桥接模式!
(3)设置UBOOT环境变量
setenv bootargs root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
格式:
setenv bootargs root=/dev/nfs nfsroot=<服务器IP>:<根文件系统的路径> ip=<开发板IP>:<服务器IP>:<网关>:<子网掩码>::eth0:off init=/linuxrc console=ttySAC0,115200
在UBOOT命令行设置环境变量后,需要保存!---> # saveenv
设置完成后重启开发板,如果正常的话,就挂挂载电脑上的文件系统
挂载失败问题分析:
1./lib目录下的依赖库拷贝错误!(路径:arm-linux-gcc的目录下)
2./etc/inittab文件的内容编写错误。 (4句代码)
3.Linux NFS服务器(PC)与开发板IP不在同一个网段!
4.没有启动NFS服务器(每次挂载不上,先运行一次启动NFS服务器脚本)。
5.NFS服务器的共享路径设置错误或者没有设置(共享路径设置文件: /etc/exports)。
重新设置了共享路径,需要执行exportfs -r。或者重启启动NFS服务器。
6.UBOOT环境变量设置错误。(NFS挂载:需要设置UBOOT环境变量为NFS挂载)。
虚拟机的上网方式需要设置位桥接,桥接到以太网卡(有线网卡)。
命令行格式不显示:(PS1环境变量)
1.profile文件格式错误。(路径:/etc/profile)
/etc/init.d/rcS文件代码编写错误或者没有可执行权限
2. 根文件系统的SD卡挂载
根文件系统挂载方式:2种。
本地挂载:从哪里读取文件系统? SD卡或者EMMC。
本地挂载:将文件系统拷贝到SD卡或者EMMC的分区!
SD卡挂载文件系统步骤:
1.对SD卡或者EMMC进行分区。
在UBOOT命令行使用fdisk命令进行分区。
命令:
TINY4412 # fdisk -c 0 2000 300 300
2.格式化
fatformat:FAT格式
ext3format:linux下格式
ext2format:linux下格式
命令:
# fatformat mmc 0:1
# ext3format mmc 0:2
3.挂载网络文件系统
设置UBOOT环境变量:
Setenv Bootargs root=/dev/nfs nfsroot=192.168.18.18: /work/rootfs
ip=192.168.18.123:192.168.18.18:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
设置完记得保存:saveenv
4. 打包根文件系统
进入到PC机上进行打包。
命令:
# tar cvf rootfs.tar /work/rootfs/
rootfs.tar:表示新的压缩包名称。
将rootfs.tar文件拷贝到/work/rootfs/文件中,方便开发板访问!
5.挂载SD卡分区
挂载命令:
mount 用法:mount <需要挂载的设备> <挂载设备的目录>
取消挂载命令:
umount 用法:umount <挂载设备的目录>
开发板的SD卡和EMMC设备命名:/dev/mmcblk0p1
0表示设备编号,1表示设备的分区编号。
挂载SD卡的第2个分区到/mnt目录下:
命令:
mount /dev/mmcblk0p2 /mnt/
怎么判断成功?在挂载的目录下会生成一个lost+found。
6. 解压文件系统到SD卡挂载的目录
到挂载目录下敲解压命令:
# tar xvf /rootfs.tar
解压之后,需要将根文件系统文件目录移动到分区的顶层目录(/mnt目录)。
7.取消挂载
命令:# umount /mnt/
注意:不能在挂载目录敲取消挂载命令。
8.设置环境变量从本地(SD卡)挂载
setenv bootargsroot=/dev/mmcblk0p2 rootfstype=ext3 init=/linuxrc console=ttySAC0 lcd=S702
9.挂载成功的效果:拔掉网线,也可以进入命令行。
3. Uboot、内核、文件系统移植进入EMMC启动
EMMC挂载文件系统步骤:
1. 烧写内核和UBOOT。(当前开发板必须从SD卡启动)
movi r f 0 40008000;emmc open 1;movi w z f 1 40008000;emmc close 1;
movi r b 0 40008000;emmc open 1;movi w z b 1 40008000;emmc close 1;
movi r u 0 40008000;emmc open 1;movi w z u 1 40008000;emmc close 1;
movi r t 0 40008000;emmc open 1;movi w z t 1 40008000;emmc close 1;
movi r k 0 40008000;movi w k 1 40008000;
2. 给EMMC分区(当前开发板从EMMC启动,拔掉SD卡)
TINY4412 # fdisk -c 0 2000 500 500
TINY4412 # ext3format mmc 0:2
TINY4412 # ext3format mmc 0:3
TINY4412 # ext3format mmc 0:4
3. 修改UBOOT环境变量(当前开发板从EMMC启动,拔掉SD卡)
修改环境变量从NFS网络文件系统启动:
set bootargs root=/dev/nfs nfsroot=192.168.18.18:/work/rootfs ip=192.168.18.123:192.168.18.18:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
自动生成设备节点文件的命令:mdev -s
查看分区和文件的大小:df、du
4. 挂载EMMC分区
# mount /dev/mmcblk0p2 /mnt/
5. 解压文件系统
# tar xvf /rootfs.tar
6. 设置uboot环境变量
set bootargs root=/dev/mmcblk0p2 rootfstype=ext3 init=/linuxrc console=ttySAC0,115200
- 嵌入式驱动开发-内核、文件系统的挂载基于(exynos4412)
- jffs2文件系统的挂载-嵌入式开发
- 基于Exynos4412 cortex A9开发板的无线网卡驱动移植过程
- Exynos4412 内核移植(五)—— 驱动的移植
- Exynos4412 内核移植(五)—— 驱动的移植
- VxWorks嵌入式操作系统的TrueFFS文件系统驱动开发
- linux内核的基础知识(配置内核) --基于嵌入式开发
- Exynos4412 ADC 设备驱动开发
- Exynos4412 ADC 设备驱动开发
- 【内核编程】【Makefile】:嵌入式驱动开发时驱动模块于内核版本不匹配的解决
- 基于at91sam9x5ek嵌入式系统的内核和文件系统双备份实现
- 嵌入式内核开发:led灯驱动
- 嵌入式Linux内核,文件系统的制作
- 嵌入式Linux内核,文件系统的制作
- 嵌入式驱动开发之内核源码树(内核升级)的引用
- 基于FAT16文件系统的嵌入式温度记录器
- 嵌入式Minis3c2440开发板详解之Bootloader下的U-boot移植,内核移植,文件系统移植
- 嵌入式Linux驱动——s3c2410的ds18b20(基于linux-2.6.24.4内核)
- 第二章 引入"进程"概念的原因
- js鼠标事件大全
- 后序式运算(C/python略)
- ubuntu14.04安装opencv3.0遇到的问题
- 第二章 SQL命令参考-SET SESSIONAUTHORIZATION
- 嵌入式驱动开发-内核、文件系统的挂载基于(exynos4412)
- 学习笔记之JSP的标签和在JSP中使用JavaBean
- 基于HBuilder的 离线安卓打包
- JavaScript中prototype用法
- SpringBoot项目打包
- [leetcode] 232. Implement Queue using Stacks
- 在线图片上传、预览、裁切、放大、缩小之 cropbox.js 的应用
- JQuery DataTables 自定义按钮实现
- 数据库复习