当前位置: 首页 > news >正文

苏州网站建设公司哪个好移动商城个人中心手机卡进度查询

苏州网站建设公司哪个好,移动商城个人中心手机卡进度查询,wordpress 优酷通用代码自适应,展示型网站建设流程方案Linux“三巨头”已经完成了 2 个了#xff0c;就剩最后一个 rootfs(根文件系统)了#xff0c;本章我们就来学习一下根文件系统的组成以及如何构建根文件系统。这是 Linux 移植的最后一步#xff0c;根文件系统构建好以后就意味着我们已经拥有了一个完整的、可以运行的最小系…Linux“三巨头”已经完成了 2 个了就剩最后一个 rootfs(根文件系统)了本章我们就来学习一下根文件系统的组成以及如何构建根文件系统。这是 Linux 移植的最后一步根文件系统构建好以后就意味着我们已经拥有了一个完整的、可以运行的最小系统。以后我们就在这个最小系统上编写、测试 Linux 驱动移植一些第三方组件逐步的完善这个最小系统。最终得到一个功能完善、驱动齐全、相对完善的操作系统。 BusyBox 构建根文件系统 BusyBox 是一个集成了大量的 Linux 命令和工具的软件像 ls、 mv、 ifconfig 等命令 BusyBox 都会提供。 BusyBox 就是一个大的工具箱这个工具箱里面集成了 Linux 的许多工具和命令。一般下载 BusyBox 的源码然后配置 BusyBox选择自己想要的功能最后编译即可。BusyBox 可以在其官网下载到官网地址为 https://busybox.net/如图所示 在官网左侧的“Get BusyBox”栏有一行“Download Source”点击“Download Source”即可打开 BusyBox 的下载页如图所示   从图中可以看出目前最新的 BusyBox 版本是 1.36.0不过本篇我们使用开发板提供的 1.29.0 版本的BusyBox 源码-busybox-1.29.0.tar.bz2 BusyBox 准备好以后就可以构建根文件系统了 准备BusyBox 一般我们在 Linux 驱动开发的时候都是通过 nfs 挂载根文件系统的便于调试不用每次修改后还要打包烧录重启所以要在 nfs 服务器自行搭建nfs服务器目录中创建一个名为 rootfs 的子目录(名字大家可以随意起为了方便就用了 rootfs)。 将 busybox-1.29.0.tar.bz2 发送到 Ubuntu 中存放位置大家随便选择。然后使用如下命令将其解压 tar -vxjf busybox-1.29.0.tar.bz2 解压完成以后进入到 busybox-1.29.0 目录中此目录中的文件和文件夹如图所示 中文字符支持可选但本文不做修改。 配置 busybox 与我们编译 Uboot、 Linux kernel 一样我们要先对 busybox 进行默认的配置有以下几种配置选项 ①、 defconfig缺省配置也就是默认配置选项。 ②、 allyesconfig全选配置也就是选中 busybox 的所有功能。 ③、 allnoconfig最小配置。 我们一般使用默认配置即可因此使用如下命令先使用默认配置来配置一下 busybox make defconfig busybox 也支持图形化配置通过图形化配置我们可以进一步选择自己想要的功能输入如下命令打开图形化配置界面 make menuconfig 配置路径如下 Location:- Settings- Build static binary (no shared libs) 不选 选项“Build static binary (no shared libs)”用来决定是静态编译 busybox 还是动态编译静态编译的话就不需要库文件但是编译出来的库会很大。动态编译的话要求根文件系统中有库文件但是编译出来的 busybox 会小很多。配置如图所示 Location:- Settings- vi-style line editing commands Location:- Linux Module Utilities- Simplified modutils 不选 Location: - Linux System Utilities - mdev (16 kb) //确保下面的全部选中默认都是选中的 编译 busybox 配置好 busybox 以后就可以编译了我们可以指定编译结果的存放目录我们肯定要将编译结果存放到前面创建的 rootfs 目录中输入如下命令 make make install CONFIG_PREFIX/home/xxxxxx/nfs/rootfs COFIG_PREFIX 指 定 编 译 结 果 的 存 放 目 录 比 如 我 存 放 到“/home/xxxxxx/nfs/rootfs”目录中等待编译完成。编译完成以后如图所示 编译完成以后会在 busybox 的所有工具和文件就会被安装到 rootfs 目录中 rootfs 目录内容如图所示 从图中可以看出 rootfs 目录下有 bin、 sbin 和 usr 这三个目录以及 linuxrc 这个文件。前面说过 Linux 内核 init 进程最后会查找用户空间的 init 程序找到以后就会运行这个用户空间的 init 程序从而切换到用户态。如果 bootargs 设置 init/linuxrc那么 linuxrc 就是可以作为用户空间的 init 程序所以用户态空间的 init 程序是 busybox 来生成的。busybox 的工作就完成了但是此时的根文件系统还不能使用还需要一些其他的文件我们继续来完善 rootfs。 添加 lib 库 向 rootfs 的“/lib”目录添加库文件: Linux 中的应用程序一般都是需要动态库的 当然你也可以编译成静态的但是静态的可执行文件会很大。如果编译为动态的话就需要动态库所以我们需要向根文件系统中添加动态库。在 rootfs 中创建一个名为“lib”的文件夹命令如下 mkdir lib lib 文件夹创建好了库文件从哪里来呢 lib 库文件从交叉编译器中获取前面我们搭建交叉编译环境的时候将交叉编译器存放到了“/usr/local/arm/”目录中。交叉编译器里面有很多的库文件这些库文件具体是做什么的我们作为初学者肯定不知道既然我不知道那就简单粗暴的把所有的库文件都放到我们的根文件系统中。这样做出来的根文件系统肯定很大但是我们现在是学习阶段还做不了裁剪。进入如下路径对应的目录 /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib 此目录下有很多的*so*(*是通配符)和.a 文件这些就是库文件将此目录下所有的*so*和.a文件都拷贝到 rootfs/lib 目录中拷贝命令如下 cp *so* *.a /home/xxxxxx/rootfs/lib/ -d 后面的“-d”表示拷贝符号链接这里有个比较特殊的库文件 ld-linux-armhf.so.3此库文件也是个符号链接相当于 Windows 下的快捷方式。会链接到库 ld-2.19-2014.08-1-git.so 上输 入命令“ls ld-linux-armhf.so.3 -l”查看此文件详细信息如图所示 从图可以看出 ld-linux-armhf.so.3 后面有个“-”表示其是个软连接文件链接到文件 ld-2.19-2014.08-1-git.so因为其是一个“快捷方式”因此大小只有 24B。但是 ld-linuxarmhf.so.3 不能作为符号链接否则的话在根文件系统中执行程序无法执行所以我们需要 ldlinux-armhf.so.3 完成逆袭由“快捷方式”变为“本尊”方法很简单那就是重新复制 ld-linuxarmhf.so.3只是不复制软链接即可。 继续进入如下目录中不用操作也可以库是一样的不会新增拷贝项 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib 此目录下也有很多的的*so*和.a 库文件我们将其也拷贝到 rootfs/lib 目录中命令如下 cp *so* *.a /home/xxxxxx/rootfs/lib/ -d 向 rootfs 的“usr/lib”目录添加库文件 在 rootfs 的 usr 目录下创建一个名为 lib 的目录将如下目录中的库文件拷贝到 rootfs/usr/lib目录下 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib 将此目录下的 so 和.a 库文件都拷贝到 rootfs/usr/lib 目录中命令如下 cp *so* *.a /home/xxxxxx/rootfs/usr/lib/ -d 至此根文件系统的库文件就全部添加好了。 创建其他文件夹 在根文件系统中创建其他文件夹如 dev、 proc、 mnt、 sys、 tmp 和 root 等创建完成以后如图所示 目前来看这个根文件系统好像已经准备好了开始测试 测试 接下来我们使用测试一下前面创建好的根文件系统 rootfs测试方法就是使用 NFS 挂载uboot 里面的 bootargs 环境变量会设置“root”的值所以我们将 root 的值改为 NFS 挂载即可。在 Linux 内核源码里面有相应的文档讲解如何设置文档为 Documentation/filesystems/nfs/nfsroot.txt格式如下 root/dev/nfs nfsroot[server-ip:]root-dir[,nfs-options] ipclient-ip:server-ip:gwip:netmask:hostname:device:autoconf:dns0-ip:dns1-ip server-ip服务器 IP 地址也就是存放根文件系统主机的 IP 地址那就是 Ubuntu 的 IP地址比如我的 Ubuntu 主机 IP 地址为 192.168.1.250。 root-dir 根文件系统的存放路径比如我的就是/home/zuozhongkai/linux/nfs/rootfs。 nfs-options NFS 的其他可选选项一般不设置。 client-ip 客户端 IP 地址也就是我们开发板的 IP 地址 Linux 内核启动以后就会使用此 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内并且没有被其他的设备使用在 Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用如果不能ping 通就说明没有被使用那么就可以设置为开发板的 IP 地址。 server-ip 服务器 IP 地址前面已经说了。 gw-ip 网关地址我的就是 192.168.1.1。 netmask子网掩码我的就是 255.255.255.0。 hostname客户机的名字一般不设置此值可以空着。 device 设备名也就是网卡名一般是 eth0 eth1….正点原子的 I.MX6U-ALPHA 开发板的 ENET2 为 eth0 ENET1 为 eth1。如果你的电脑只有一个网卡那么基本只能是 eth0。 这里我们使用 ENET2所以网卡名就是 eth0。 autoconf 自动配置一般不使用所以设置为 off。 dns0-ip DNS0 服务器 IP 地址不使用。 dns1-ip DNS1 服务器 IP 地址不使用。 根据上面的格式 bootargs 环境变量的 root 值如下 root/dev/nfs nfsroot192.168.1.250:/home/zuozhongkai/linux/nfs/rootfs,prototcp rw ip192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off “prototcp”表示使用 TCP 协议“rw”表示 nfs 挂载的根文件系统为可读可写。 启动开发板进入 uboot 命令行模式然后重新设置 bootargs 环境变量命令如下 setenv bootargs consolettymxc0,115200 root/dev/nfs nfsroot192.168.1.250: /home/zuozhongkai/linux/nfs/rootfs,prototcp rw ip192.168.1.251:192.168.1.250:192.168.1.1: 255.255.255.0::eth0:off //设置 bootargs saveenv //保存环境变量 设置好以后使用“boot”命令启动 Linux 内核结果如图所示 从图中可以看出我们进入了根文件系统说明我们的根文件系统工作了如果没有启动进入根文件系统的话可以重启一次开发板试试。我们可以输入“ls”命令测试一下结果如图所示 可以看出 ls 命令工作正常那么是不是说明我们的 rootfs 就制作成功了呢大家注意在进入根文件系统的时候会有下面这一行错误提示 提示很简单说是无法运行“/etc/init.d/rcS”这个文件因为这个文件不存在。 完善rootfs 创建/etc/init.d/rcS 文件 rcS 是个 shell 脚本 Linux 内核启动以后需要启动一些服务而 rcS 就是规定启动哪些文件的脚本文件。在 rootfs 中创建/etc/init.d/rcS 文件然后在 rcS 中输入如下所示内容 1 #!/bin/sh 2 3 PATH/sbin:/bin:/usr/sbin:/usr/bin:$PATH 4 LD_LIBRARY_PATH$LD_LIBRARY_PATH:/lib:/usr/lib 5 export PATH LD_LIBRARY_PATH 6 7 mount -a 8 mkdir /dev/pts 9 mount -t devpts devpts /dev/pts 10 11 echo /sbin/mdev /proc/sys/kernel/hotplug 12 mdev -s 第 1 行表示这是一个 shell 脚本。 第 3 行 PATH 环境变量保存着可执行文件可能存在的目录这样我们在执行一些命令或者可执行文件的时候就不会提示找不到文件这样的错误。 第 4 行 LD_LIBRARY_PATH 环境变量保存着库文件所在的目录。 第 5 行使用 export 来导出上面这些环境变量相当于声明一些“全局变量”。 第 7 行使用 mount 命令来挂载所有的文件系统这些文件系统由文件/etc/fstab 来指定所以我们一会还要创建/etc/fstab 文件。 第 8 和 9 行创建目录/dev/pts然后将 devpts 挂载到/dev/pts 目录中。 第 11 和 12 行使用 mdev 来管理热插拔设备通过这两行 Linux 内核就可以在/dev 目录下自动创建设备节点。关于 mdev 的详细内容可以参考 busybox 中的 docs/mdev.txt 文档。 示例代码中的 rcS 文件内容是最精简的大家如果去看 Ubuntu 或者其他大型 Linux操作系统中的 rcS 文件就会发现其非常复杂。因为我们是初次学习所以不用搞这么复杂的而且这么复杂的 rcS 文件也是借助其他工具创建的比如 buildroot 等。创建好文件/etc/init.d/rcS 以后一定要给其可执行权限 置好以后就重新启动 Linux 内核启动以后如图所示 从图中可以看到提示找不到/etc/fstab 文件还有一些其他的错误我们先把/etc/fstab这个错误解决了。说不定把这个问题解决以后其他的错误也就解决了。前面我们说了“mount -a”挂载所有根文件系统的时候需要读取/etc/fstab因为/etc/fstab 里面定义了该挂载哪些文件好了接下来就是创建/etc/fstab 文件。 创建/etc/fstab 文件 在 rootfs 中创建/etc/fstab 文件 fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区格式如下 file system mount point type options dump pass file system要挂载的特殊的设备也可以是块设备比如/dev/sda 等等。 mount point挂载点。 type文件系统类型比如 ext2、 ext3、 proc、 romfs、 tmpfs 等等。 options挂载选项在 Ubuntu 中输入“man mount”命令可以查看具体的选项。一般使用 defaults也就是默认选项 defaults 包含了 rw、 suid、 dev、 exec、 auto、 nouser 和 async。 dump为 1 的话表示允许备份为 0 不备份一般不备份因此设置为 0。 pass磁盘检查设置为 0 表示不检查。根目录‘/’设置为 1其他的都不能设置为 1其他的分区从 2 开始。一般不在 fstab 中挂载根目录因此这里一般设置为 0。按照上述格式在 fstab 文件中输入如下内容 1 #file system mount point type options dump pass 2 proc /proc proc defaults 0 0 3 tmpfs /tmp tmpfs defaults 0 0 4 sysfs /sys sysfs defaults 0 0 fstab 文件创建完成以后重新启动 Linux结果如图所示 从图可以看出启动成功而且没有任何错误提示。但是我们要还需要创建一个文件/etc/inittab。 创建/etc/inittab 文件 inittab 的详细内容可以参考 busybox 下的文件 examples/inittab。 init 程序会读取/etc/inittab这个文件 inittab 由若干条指令组成。每条指令的结构都是一样的由以“:”分隔的 4 个段组 成格式如下 id:runlevels:action:process id每个指令的标识符不能重复。但是对于 busybox 的 init 来说 id有着特殊意义。id用来指定启动进程的控制 tty一般我们将串口或者 LCD 屏幕设置为控制 tty。 runlevels 对 busybox 来说此项完全没用所以空着。 action动作用于指定process可能用到的动作。 busybox 支持的动作如表所示 动作描述sysinit在系统初始化的时候 process 才会执行一次。respawn当 process 终止以后马上启动一个新的。askfirst和 respawn 类似在运行 process 之前在控制台上显示“Please press Enter to activate this console.”。只要用户按下“Enter”键以后才会执行 process。wait告诉 init要等待相应的进程执行完以后才能继续执行。once仅执行一次而且不会等待 process 执行完成。restart当 init 重启的时候才会执行 process。ctrlaltdel当按下 ctrlaltdel 组合键才会执行 process。shutdown关机的时候执行 process。 process 具体的动作比如程序、脚本或命令等。参考 busybox 的 examples/inittab 文件我们也创建一个/etc/inittab在里面输入如下内容 1 #etc/inittab 2 ::sysinit:/etc/init.d/rcS 3 console::askfirst:-/bin/sh 4 ::restart:/sbin/init 5 ::ctrlaltdel:/sbin/reboot 6 ::shutdown:/bin/umount -a -r 7 ::shutdown:/sbin/swapoff -a 第 2 行系统启动以后运行/etc/init.d/rcS 这个脚本文件。 第 3 行将 console 作为控制台终端也就是 ttymxc0。 第 4 行重启的话运行/sbin/init。 第 5 行按下 ctrlaltdel 组合键的话就运行/sbin/reboot看来 ctrlaltdel 组合键用于重启系统。 第 6 行关机的时候执行/bin/umount也就是卸载各个文件系统。 第 7 行关机的时候执行/sbin/swapoff也就是关闭交换分区。 /etc/inittab 文件创建好以后就可以重启开发板即可至此根文件系统要创建的文件就已经全部完成了。接下来就要对根文件系统进行其他的测试比如我们自己编写的软件运行是否正 常、是否支持软件开机自启动、以及能不能链接等。 创建/etc/resolv.conf指定域名服务器 1 nameserver 114.114.114.114 2 nameserver 192.168.1.1 开机自启 进入根文件系统的时候会运行/etc/init.d/rcS 这个 shell 脚本因此我们可以在这个脚本里面添加自启动相关内容。添加完成以后的/etc/init.d/rcS 文件内容如下 1 #!/bin/sh 2 PATH/sbin:/bin:/usr/sbin:/usr/bin 3 LD_LIBRARY_PATH$LD_LIBRARY_PATH:/lib:/usr/lib 4 runlevelS 5 umask 022 6 export PATH LD_LIBRARY_PATH runlevel 7 8 mount -a 9 mkdir /dev/pts 10 mount -t devpts devpts /dev/pts 11 12 echo /sbin/mdev /proc/sys/kernel/hotplug 13 mdev -s 14 15 #开机自启动 16 cd /drivers 17 ./hello 18 cd / 第 16 行进入 drivers 目录因为要启动的软件存放在 drivers 目录下。 第 17 行以后台方式执行 hello 这个软件。 第 18 行退出 drivers 目录进入到根目录下。 自启动代码添加完成以后就可以重启开发板hello 这个软件就会自动运行
http://www.w-s-a.com/news/871216/

相关文章:

  • 天津制作网站的公司电话wordpress架设进出销
  • tomcat做静态网站prestashop和wordpress
  • 上海响应式建站wap网站微信分享代码
  • 四川建筑人才招聘网南昌网站优化
  • 南充网站建设制作重庆有的设计网站大全
  • 深圳沙井做网站公司网站搭建谷歌seo
  • 学校资源网站的建设方案山西省住房城乡建设厅网站
  • 医疗行业网站建设深圳网络科技公司排名
  • 企业形象型网站建设wordpress chess
  • 网站的域名起什么好处罗湖网站建设公司乐云seo
  • 网站的服务器在哪里sem推广软件选哪家
  • 科技网站欣赏婚庆公司经营范围
  • 网站后台管理系统php校园网站建设意见表填写
  • 网站建设问题调查常州百度推广代理公司
  • net网站开发学习谷歌优化培训
  • 企业网站公众号广东网站建设方便
  • 2008r2网站建设张店网站建设方案
  • 企业网站首页学生做的网站成品
  • 网站开发 架构设计企业信息管理系统的组成不包括
  • 网站维护模式网页传奇游戏平台排行
  • 企业网站改自适应蛋糕方案网站建设
  • 网站开发技术职责网站升级中html
  • 天网网站建设百度权重高的网站
  • 明年做哪些网站致富网站站长 感受
  • 东莞营销网站建设优化怎么做微信网站推广
  • 网站建设一个多少钱php网站服务器怎么来
  • 引流用的电影网站怎么做2012服务器如何做网站
  • 什么网站可以做推广广州安全信息教育平台
  • 网站开发具备的相关知识wordpress简约文字主题
  • asp网站伪静态文件下载seo外包公司哪家好