免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11779 | 回复: 4
打印 上一主题 下一主题

[BootLoader] 嵌入式Linux Ramdisk文件系统制作(u-boot, busybox) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-02 12:45 |只看该作者 |倒序浏览
本帖最后由 myforever 于 2021-11-28 20:09 编辑

申明:此贴乃引用贴

为尊重原作者,特注明出处:随点BBS


本文以mpc8247主板上移植Linux为例,详细讲解了嵌入式Linux Ramdisk文件系统制作过程,

图文并茂,并有排错方法,涉及u-boot和busybox

一、busybox的编译

    首先是交叉编译设置,打开busybox根目录下的Makefile,进行修改


一般情况下,为了让busybox能够独立于其他的库文件而可以单独运行,需要将busybox编译成静态的。
  1. #make menuconfig
  2. Busybox Settings --->
  3.     Build Options --->
  4.         Build BusyBox as a static binary (no shared libs)        //静态
  5.     Installation Options --->
  6.         Don't use /usr        //make install的时候不会安装到根目录,而是安装到./_install
  7. Linux System Utilities --->
  8.     mdev        //相当于udev
  9.     Support /etc/mdev.conf
  10.     Support command execution at device addition/removal
  11. Shells --->   
  12.     Choose your default shell (msh)        //具有ash没有的功能,比如支持tab补齐,历史纪录等等的高级功能
复制代码
而编译成静态的分为glibc和uclibc,如果系统没有安装uclibc的话,那就会报下面的错



解决办法是打开 applets/applets.c 将其中的错误注释掉



其他的busybox选项根据需要进行选择!
  1. #make
  2. #make install
复制代码
这样就在./_install目录下生成了busybox


二、ramdisk文件系统生成

上图中首先创见了一个10M的文件系统映象

然后使用losetup命令将此镜像与块设备/dev/loop0进行挂接

如果出现"ioctl: LOOP_SET_FD:设备或资源忙",说明/dev/loop0设备还和一文件联系,可用losetup /dev/loop0查看地,并可用-d 删除


上图是用命令mke2fs来格式化此块设备/dev/loop0,其实就是格式化我们刚生成的那个文件系统镜像,ext2格式

上图是挂载文件系统镜像,可见经过刚才格式化之后的文件系统镜像里面只有lost+found这个文件夹

之后可以将步骤一中生成的_install目录下的所有文件拷贝进来即可,

/et/init.d/rcS文件如下修改



其他的系统配置文件可以根据需要进行更改

三、u-boot加载内核和文件系统
  1. => tftp 800000 uImage; tftp a00000 rootfs.img; bootm 800000 a00000
  2. Using FCC1 ETHERNET device
  3. TFTP from server 192.168.0.102; our IP address is 192.168.0.20
  4. Filename 'uImage'.
  5. Load address: 0x800000
  6. Loading: #################################################################
  7.          #################################################################
  8.          #################################################################
  9.          #################################################################
  10.          #################################################################
  11.          ###########################################
  12. done
  13. Bytes transferred = 1880231 (1cb0a7 hex)
  14. Using FCC1 ETHERNET device
  15. TFTP from server 192.168.0.102; our IP address is 192.168.0.20
  16. Filename 'rootfs.img'.
  17. Load address: 0xa00000
  18. Loading: #################################################################
  19.          #################################################################
  20.          #################################################################
  21.          #################################################################
  22.          #################################################################
  23.          #################################################################
  24.          #################################################################
  25.          #################################################################
  26.          #################################################################
  27.          ###################################
  28. done
  29. Bytes transferred = 3170368 (306040 hex)
  30. ## Booting image at 00800000 ...
  31.    Image Name:   Linux-2.6.11
  32.    Image Type:   PowerPC Linux Kernel Image (gzip compressed)
  33.    Data Size:    1880167 Bytes =  1.8 MB
  34.    Load Address: 00000000
  35.    Entry Point:  00000000
  36.    Verifying Checksum ... OK
  37.    Uncompressing Kernel Image ... OK
  38. ## cmdline at 0x007FFF00 ... 0x007FFF14
  39. memstart    = 0x00000000
  40. memsize     = 0x08000000
  41. flashstart  = 0xFE000000
  42. flashsize   = 0x01000000
  43. flashoffset = 0x00033000
  44. sramstart   = 0x00000000
  45. sramsize    = 0x00000000
  46. immr_base   = 0xF0000000
  47. bootflags   = 0x00000001
  48. vco         =    400 MHz
  49. sccfreq     =    100 MHz
  50. brgfreq     =    100 MHz
  51. intfreq     =    400 MHz
  52. cpmfreq     =    200 MHz
  53. busfreq     =    100 MHz
  54. ethaddr     = 00:08:02:06:10:00
  55. IP addr     = 192.168.0.20
  56. baudrate    = 115200 bps
  57. ## Loading RAMDisk Image at 00a00000 ...
  58.    Image Name:   
  59.    Image Type:   PowerPC Linux RAMDisk Image (uncompressed)
  60.    Data Size:    3170304 Bytes =  3 MB
  61.    Load Address: 00000000
  62.    Entry Point:  00000000
  63.    Verifying Checksum ... OK
  64.    Loading Ramdisk to 07880000, end 07b86000 ... OK
  65. Linux version 2.6.11 (root@Embedded001) (gcc version 3.4.3) #1 Fri Sep 26 11:08:35 CST 2008
  66. Motorola PQ2 ADS PowerPC port
  67. arch/ppc/syslib/m82xx_pci.c: The PCI bus is 33333333 Mhz.
  68. Waiting 1 second after deasserting RST...
  69. Built 1 zonelists
  70. Kernel command line: console=ttyS0,115200
  71. PID hash table entries: 1024 (order: 10, 16384 bytes)
  72. Warning: real time clock seems stuck!
  73. Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
  74. Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
  75. Memory: 122272k available (2660k kernel code, 1524k data, 116k init, 0k highmem)
  76. Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
  77. checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd
  78. Freeing initrd memory: 3096k freed
  79. NET: Registered protocol family 16
  80. PCI: Probing PCI hardware
  81. dev = 0, pin = 1
  82. slot = 0, dev = 0, pin = 1
  83. dev = a0, pin = 1
  84. slot = 20, dev = a0, pin = 1
  85. dev = b8, pin = 1
  86. slot = 23, dev = b8, pin = 1
  87. dev = b9, pin = 1
  88. slot = 23, dev = b9, pin = 1
  89. PCI: Cannot allocate resource region 0 of device 0000:00:00.0
  90. PCI: Cannot allocate resource region 1 of device 0000:00:00.0
  91. SCSI subsystem initialized
  92. Sangoma WANPIPE Router v1.1 (c) 1995-2000 Sangoma Technologies Inc.
  93. devfs: 2004-01-31 Richard Gooch ([email]rgooch@atnf.csiro.au[/email])
  94. devfs: boot_options: 0x1
  95. Initializing Cryptographic API
  96. Serial: CPM driver $Revision: 0.01 $
  97. ttyS0 at MMIO 0xf0011a80 (irq = 4) is a CPM UART
  98. ttyS1 at MMIO 0xf0011a00 (irq = 40) is a CPM UART
  99. ttyS2 at MMIO 0xf0011a60 (irq = 43) is a CPM UART
  100. io scheduler noop registered
  101. io scheduler anticipatory registered
  102. io scheduler deadline registered
  103. io scheduler cfq registered
  104. RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
  105. loop: loaded (max 8 devices)
  106. nbd: registered device at major 43
  107. Intel(R) PRO/1000 Network Driver - version 5.6.10.1-k2
  108. Copyright (c) 1999-2004 Intel Corporation.
  109. e100: Intel(R) PRO/100 Network Driver, 3.3.6-k2-NAPI
  110. e100: Copyright(c) 1999-2004 Intel Corporation
  111. ipddp.c:v0.01 8/28/97 Bradford W. Johnson <[email]johns393@maroon.tc.umn.edu[/email]>
  112. ipddp0: Appletalk-IP Encap. mode by Bradford W. Johnson <[email]johns393@maroon.tc.umn.edu[/email]>
  113. i2c /dev entries driver
  114. eth0: FCC ENET Version 0.3, 00:08:02:86:10:00
  115. eth1: FCC ENET Version 0.3, 00:08:02:46:10:00
  116. NET: Registered protocol family 26
  117. NET: Registered protocol family 2
  118. IP: routing cache hash table of 1024 buckets, 8Kbytes
  119. TCP established hash table entries: 8192 (order: 4, 65536 bytes)
  120. TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
  121. TCP: Hash tables configured (established 8192 bind 8192)
  122. IPv4 over IPv4 tunneling driver
  123. GRE over IPv4 tunneling driver
  124. ip_conntrack version 2.1 (1024 buckets, 8192 max) - 248 bytes per conntrack
  125. ip_tables: (C) 2000-2002 Netfilter core team
  126. ipt_recent v0.3.1: Stephen Frost <[email]sfrost@snowman.net[/email]>.  [url]http://snowman.net/projects/ipt_recent/[/url]
  127. ClusterIP Version 0.6 loaded successfully
  128. arp_tables: (C) 2002 David S. Miller
  129. IPVS: Registered protocols (TCP, UDP, AH, ESP)
  130. IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
  131. IPVS: ipvs loaded.
  132. IPVS: [rr] scheduler registered.
  133. IPVS: [wrr] scheduler registered.
  134. IPVS: [lc] scheduler registered.
  135. IPVS: [wlc] scheduler registered.
  136. IPVS: [lblc] scheduler registered.
  137. IPVS: [lblcr] scheduler registered.
  138. IPVS: [dh] scheduler registered.
  139. IPVS: [sh] scheduler registered.
  140. IPVS: [sed] scheduler registered.
  141. IPVS: [nq] scheduler registered.
  142. Initializing IPsec netlink socket
  143. NET: Registered protocol family 1
  144. NET: Registered protocol family 17
  145. NET: Registered protocol family 15
  146. Bridge firewalling registered
  147. Ebtables v2.0 registered
  148. NET: Registered protocol family 4
  149. NET: Registered protocol family 5
  150. NET: Registered protocol family 9
  151. X.25 for Linux. Version 0.2 for Linux 2.1.15
  152. NET: Registered protocol family 8
  153. NET: Registered protocol family 20
  154. lec.c: Sep 26 2008 11:07:03 initialized
  155. mpoa: /proc/mpoa initialized
  156. mpc.c: Sep 26 2008 11:07:01 initialized
  157. NET4: DECnet for Linux: V.2.5.68s (C) 1995-2003 Linux DECnet Project Team
  158. DECnet: Routing cache hash table of 1024 buckets, 8Kbytes
  159. NET: Registered protocol family 12
  160. NET: Registered protocol family 19
  161. 802.1Q VLAN Support v1.8 Ben Greear <[email]greearb@candelatech.com[/email]>
  162. All bugs added by David S. Miller <[email]davem@redhat.com[/email]>
  163. SCTP: Hash tables configured (established 4096 bind 8192)
  164. RAMDISK: ext2 filesystem found at block 0
  165. RAMDISK: Loading 3096KiB [1 disk] into ram disk... done.
  166. VFS: Mounted root (ext2 filesystem) readonly.
  167. Mounted devfs on /dev
  168. init started: BusyBox v1.7.2 (2008-09-26 10:46:55 CST)
  169. starting pid 810, tty '': '/etc/init.d/rcS'
  170. mdev: /sys/block: No such file or directory
  171. mdev: /sys/class: No such file or directory
  172. starting pid 813, tty '': '/bin/sh'
  173. Processing /etc/profile... Done
复制代码


[ 本帖最后由 myforever 于 2008-11-2 13:34 编辑 ]

评分

参与人数 1可用积分 +15 收起 理由
bitmilong + 15 精品文章

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2008-11-04 09:42 |只看该作者
好东西,谢谢分享

论坛徽章:
0
3 [报告]
发表于 2008-11-04 10:22 |只看该作者
感谢分享

论坛徽章:
0
4 [报告]
发表于 2008-11-04 20:10 |只看该作者

回复 #1 myforever 的帖子

其实如果编译成静态库的话,文件系统会比较大,我现在编译成动态库也可以用。

论坛徽章:
0
5 [报告]
发表于 2008-11-04 21:35 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP