您的位置:首页 > 其它

fs4412开发板学习笔记(三)

2015-10-27 23:12 591 查看
1.重新制作跟文件系统启动还是发生如下错误

[    1.955000] request_module: runaway loop modprobe binfmt-464c
//该错误是由于没有配置交叉编译工具
配置busybox时,在配置中发现busybox setting->build options->
在cross compile prefix中写入arm-none-linux-gnueabi-


[    1.965000] Failed to execute /linuxrc (error -8).  Attempting defaults...
[    1.990000] request_module: runaway loop modprobe binfmt-464c
[    2.000000] Starting init: /sbin/init exists but couldn't execute it (error -8)
[    2.020000] request_module: runaway loop modprobe binfmt-464c
[    2.030000] Starting init: /bin/sh exists but couldn't execute it (error -8)
[    2.040000] Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.


2.加载文件系统镜像到内存启动参数设置为如下:

//这个手册没提到

setenv bootargs root=/dev/ram0 init=/linuxrc console=ttySAC2,115200

setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000

3.制作linux文件系统步骤:

a.从http://busybox.net/downloads/下载busybox

b.解压busybox

c. cd busybox

make menuconfig
||
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
[ ] Force NOMMU build
[ ] Build with Large File Support (for accessing files > 2 GB)
(arm-none-linux-gnueabi-) Cross Compiler prefix//这里设置交叉编译工具
() Additional CFLAGS
make
make install
cd _install
ls(发现有如下目录)
||
bin linuxrc sbin usr
mkdir dev etc mnt proc var tmp sys root
添加库:
toolchain-4.5.1-farsight.tar.bz2
||(题外话)
Toolchain  即工具链,一套流程里面用到的每个工具和相关的库组成的集合,就称为工具链(tool chain)。
||
四种工具
||
cross assembler
cross compile
cross library
cross link
Toolchain 一般内附有程式编译器(compiler),如GCC,可以进行程式编译、或跨平台编译(cross compile)工作。
目前的工具键软件有 RealWorks toolchain、GNU toolchain。微软公司的 Visual Studio 2005 是 Windows CE 的 toolchain。
交叉编译(cross compile)
交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,
比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,
编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,
虽然两个平台用的都是Linux系统。这种方法在异平台移植和嵌入式开发时非常有用。
相对与交叉编译,平常做的编译叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。
tar -xjf toolchain-4.5.1-farsight.tar.bz2
cp ../../../toolchain-4.5.1-farsight/arm-none-linux-gnueabi/lib/ . -a(此时在_install目录下面)
删除静态库和共享库文件中的符号表:
rm lib/*.a
arm-none-linux-gnueabi-strip lib/*.so(超级用户执行)
查看库的大小,确保不超过4M
du -mh lib/


d.添加系统启动文件

(1)在 etc 下添加文件inittab,文件内容如下:

#this is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# stuff to do when restarting the init process
::restart:/sbin/init
# stuff to do before rebooting
::ctrlaltdel:/sbin/reboot


(2)在 etc 下添加文件fstab ,文件内容如下:
#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
这里我们挂载的文件系统有三个proc、sysfs 和 tmpfs 。在内核中proc 和sysfs 默认都支持,而
tmpfs 是没有支持的,我们需要添加tmpfs 的支持
修改 Linux 内核配置;
$ cd ~/ kernel/linux-3.14
$ make menuconfig
File systems --->
Pseudo filesystems --->
[*] Virtual memory file system support (former shm fs)
[*] Tmpfs POSIX Access Control Lists
重新编译内核:
$ make uImage
$ cp arch/arm/boot/uImage /tftpboot

(3)回到创建的文件系统处,在etc 下创建init.d 目录,
并在init.d 下创建rcS 文件,rcS 文件内容为:
#!/bin/sh
# This is the first script called by init process
/bin/mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
为 rcS 添加可执行权限:
$ chmod +x init.d/rcS

(4)在 etc 下添加profile 文件,文件内容为:
#!/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


重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件

e . NFS 测试

删除原先的/source/rootfs:

sudorm−rf/source/rootfs将我们新建的根文件系统拷贝到/source/rootfs目录下 sudo rm -rf /source/rootfs
将我们新建的根文件系统拷贝到/source/rootfs 目录下
sudo mkdir /source/rootfs

$ sudo cp _install/* /source/rootfs –a

4.Ramdisk 文件系统制作

将通过nfs 测试好的文件系统内容打包成ramdisk 文件镜像,并烧写到目标平台测试。通过实验掌握

ramdisk 文件系统的特性及镜像制作方法。

步骤

(1)、制作一个大小为8M 的镜像文件
$ cd ~
$ dd if=/dev/zero of=ramdisk bs=1k count=8192 (ramdisk 为8M)
(2)、格式化这个镜像文件为ext2
$ mkfs.ext2 -F ramdisk
(3)、在mount 下面创建initrd 目录作为挂载点
$ sudo mkdir /mnt/initrd
(4)、将这个磁盘镜像文件挂载到/mnt/initrd 下
注意这里的ramsidk 不能存放在rootfs 目录中
$ sudo mount -t ext2 -o loop ramdisk /mnt/initrd
(5)、将我们的文件系统复制到initrd.img 中
将测试好的文件系统里的内容全部拷贝到/mnt/initrd 目录下面
$ sudo cp /source/rootfs/* /mnt/initrd –a
cp /source/rootfs_ram/* /mnt/initrd -ra
(6)、卸载initrd
$ sudo umount /mnt/initrd
(7)、压缩initrd.img 为initrd.img.gz 并拷贝到/tftpboot 下
$ gzip --best -c ramdisk > ramdisk.gz
(8)、格式化为uboot 识别的格式
$ mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
$ cp ramdisk.img /tftpboot
(9)、配置内核支持RAMDISK
制作完 ramdisk.img 后,需要配置内核支持RAMDISK 作为启动文件系统,修改内核配置
$ cd ~/ kernel/linux-3.14
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
(10)、在U-BOOT 命令行重新设置启动参数:
setenv bootargs root=/dev/ram0 init=/linuxrc console=ttySAC2,115200
setenv bootcmd tftp 41000000 uImage_3.14\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000


重新启动开发板查看能否正常启动。

问题:自己制作的跟文件系统,执行第一个文件的时候发生如下问题

bad variable nameine 10: LD_LIBRARY_PATH
': No such file or directory
Please press Enter to activate this console.
can't run '/bin/
Please press Enter to activate this console. ÿ
': No such file or directory


使用光盘的配置文件可以。说明文件系统是没问题的,问题出在配置文件。

应该是配置文件的格式有问题,以前是直接粘贴的。(有些用vim手打后可以)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: