热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux学习:Uboot,Kernel,根文件系统初步分析

关于uboot启动分析以下这条链接写的不错,使用的是MINI2440平台:

关于uboot 启动分析以下这条链接写的不错,使用的是MINI2440平台:



http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html

2.编译Kernel:



Makefile 可以参考:/arch/arm/kernel/kbuild/Makefile.txt

config : (1) autoconf.h

  (2) auto.conf

编译后可根据:  /arch/arm/kernel/head.S  和 /arch/arm/kernel/vmlinux.lds  分析启动流程。

内核启动完挂接根文件系统,然后启动应用程序。

3.构建根文件系统:jffs2 , yaffs2

内核启动应用程序:①open(/dev/console)  : 终端。 ②通过run_init_process 启动程序。

init程序(即busybox):①读取配置文件(/etc/inittab)。 ②解析配置文件。 ③执行(客户定制程序)。

busybox : ls, cp, cd等指令(应用)的集合。

- init_main  - parse_inittab - file = fopen(INITTAB, "r");

inittab格式: id : runlevels : action : process

id = /dev/id ,用作终端:stdin,  stdout,  stderr: printf,scanf,err.
  runlevels: 忽略
  action: 执行时机: sysinit, respawn, askfirst, wait, once, restart, ctrlaltdel, shutdon.
  process: 应用程序或脚本

(一)根据配置文件或默认设置构造action:

static void new_init_action(init action, const char *command, const char *cons)

-     new_init_action(ASKFIRST, "-/bin/sh", "/dev/tty2"); 反推出配置文件:tty2::askfirst:-/bin/sh

①创建一个init_action结构,填充。

②放入init_action_list链表。

(二)执行action:多种action类型

run_actions(SYSINIT);

run_actions(WAIT);

run_actions(ONCE);

while(1){

run_actions(RESPAWN);

run_actions(ASKFIRST);

wpid = wait(NULL);

while (wpid 0){

a- pid = 0;

}

}

最小根文件系统构成:①/dev/console , /dev/null  ②init = busybox. ③/etc/inittab ④inittab配置文件指定的程序 ⑤程序依赖的库(C库)。

构建根文件系统:

①參考INSTALL如何編譯busybox:(以下构建init)

make defconfig      : 使用默认配置减少一些配置工作

make menuconfig  : Build Options 配置編譯選項。
   make
   make CROSS_COMPILE=arm-linux-  或 在Makefile中指定编译工具链。

  ARCH ?=arm  
CROSS_COMPILE ?= arm-linux-

make CONFIG_PREFIX=/work/nfs_root/fs_mini/    install (指定你要编译到的目录,直接install可能会破坏pc机系统)

②制作根文件系统:(完善最小系统)

测试指令: sudo mknod console c 5 1

安装glibc库:  mkdir -p /work/nfs_root/fs_mini/lib
cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib   //进入交叉编译器glibc库目录
cp *so* /work/nfs_root/fs_mini/lib -d(如果是链接文件依然保持链接形式)

制作系统映像:
   编译安装yaffs2image文件系统制作工具

1、下载yaffs2源码包:git clone git://www.aleph1.co.uk/yaffs2

2、解压

3、为了使内核支持yaffs2源码,必须为内核打补丁:.

 进入yaffs2根目录,执行/patch-ker.sh c m /home/zdl/study/linux-2.6.10-fs2410/linux-2.6.10,

其中c表示复制 m代表复合版本,另外与之相对立的参数 l表示仅链接不复制文件,s代表单一版本,因为yaffs目前具有yaffs和yaffs2两个源码包。

使用方法:mkyaffs2image /work/nfs_root/fs_mini  fs_mini.yaffs2

挂在虚拟根文件系统:mkdir proc
mount -t proc null /proc   //可以加入/etc/init.d/rcS 脚本中开机自动挂载

另一种方法:mount -a   //依赖/etc/fstab

fstab格式:#device mount-point type options dump fsck order

proc   /proc   proc    defaults      0      0

udev机制:自动创建/dev/设备节点
busybox默认的简化版mdev使用:参考mdev.txt   ,同样可以在fstab中指定mount。

 编译制作jffs2映像文件的工具:

cd /work/GUI/xwindow/X/deps
tar xzf zlib-1.2.3.tar.gz
cd zlib-1.2.3
      ./configure --shared --prefix=/usr
      make
      sudo make install
    然后编译 mkfs.jffs2
cd /work/tools
      tar xjf mtd-utils-05.07.23.tar.bz2
cd mtd-utils-05.07.23/util
make
      sudo make install

制作jffs2映像文件:
cd /work/nfs_root
mkfs.jffs2 -n -s 2048-e 128KiB -d fs_mini -o fs_mini.jffs2

网络文件系统NFS使用:

配置nfs服务:sudo vi /etc/exports    
      重启nfs服务:sudo /etc/init.d/nfs-kernel-server restart
      使用nfs服务:mount -t nfs -o nolock 192.168.1.19:/work/nfs_root/   mini_fs
      直接从nfs启动:参考nfsroot.txt配置  ip= client-ip : server-ip : gw-ip : netmask : hostname : device : autoconf
      bootargs=noinitrd root=/dev/nfs nfsroot=192.168.1.19:/work/nfs_root/mini_fs ip=192.168.1.11:192.168.1.19:192.168.1.1:255.255.255.0::eth0:off


   



推荐阅读
  • http:blog.sina.com.cnsblog_491529d60100061h.html安装完SLED10后发现仍然有“热启动网络不通”的问题,原因是内核版本 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 1.      准备工作: 程序:MinGW-3.1.0-1.exe     windows下的gcc,编译c语言的工具下载地址: http:umn.dl.sourceforge. ... [详细]
  • buildroot构建项目(一)buildroot介绍【转】
    转自:https:www.cnblogs.comkele-dadp8231434.html1.1什么是buildrootBuildroot是Linux平台上一个构建嵌入式Linux ... [详细]
  • 本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动 ... [详细]
  • deb文件格式本是ubuntu的安装文件,那么我想要在fedora中安装,需要把deb格式转化成rpm格式,我们用skype举例:1.下载转换工具alien_8.78.tar.gz2.deb转化成 ... [详细]
  • 字符设备驱动八、字符设备驱动8.1概述8.2helloworld字符设备模块8.2.1helloworld_char_driver.c代码8.2.2Makefile8.2.3ioc ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • 安全事件周报(10.2611.01)
    安全事件周报(10.2611.01) ... [详细]
author-avatar
顆顆顆顆幸福_483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有