精华内容
下载资源
问答
  • linux内核启动后,会对根文件系统进行加载,但是内核是在哪里对根文件进行加载的? ``` List of all partitions: 1f00 256 mtdblock0 (driver?) 1f01 64 mtdblock1 (driver?) 1f02 6272 mtdblock2 (driver?) 1f03...
  • Tiny4412 uboot启动内核并通过网络挂载根文件系统 从买友善之臂的tiny4412 SDK1611开发板现在已经近三个月了,之前不知道从哪里入手更没时间弄,最近抽出来时间开始学习了,对于我这个新手来说主要还是依靠强大...

    Tiny4412 uboot启动内核并通过网络挂载根文件系统

    从买到友善之臂的tiny4412 SDK1611开发板到现在已经近三个月了,之前不知道从哪里入手更没时间弄,最近抽出来时间开始学习了,对于我这个新手来说主要还是依靠强大的网络,参考了很多篇文章。

    开始进入正题

    开发板为Tiny4412 SDK 1611

    所用到的安装包在https://download.csdn.net/download/w0725217/10802004可以下载到

    1. 安装交叉编译工具链 gcc-4.6.4.tar

    2. 制作uboot

    3. 制作Linux镜像文件

    4. 制作根文件系统

    5. uboot启动内核网络挂载根文件系统

      1.安装交叉编译工具链 gcc-4.6.4.tar

      1.将交叉编译工具链压缩包拷贝至Ubuntu主机的用户主目录下(或其他任意目录),然后进入该目录使用下面的命令对该压缩包进行解压。

      ​ $ tar –xvf gcc-4.6.4.tar.xz

      2.解压完成后,进入到相应的目录获取绝对路径。

      ​ $ cd gcc-4.6.4/bin/

      ​ $ pwd

      ​ /home/farsight/gcc-4.6.4/bin

      3.编辑/etc/environment文件,加入相应的路径。

      ​ $ sudo vim /etc/environment

      ​ PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/farsight/gcc-4.6.4/bin"

      4.注销后重新登录,使用下面的命令确定交叉编译工具链安装成功。

      ​ $ arm-none-linux-gnueabi-gcc -v

      Using built-in specs.

      COLLECT_GCC=arm-none-linux-gnueabi-gcc

      COLLECT_LTO_WRAPPER=/home/farsight/gcc-4.6.4/bin/…/libexec/gcc/arm-arm1176jzfssf-linux-gnueabi/4.6.4/lto-wrapper

      Target: arm-arm1176jzfssf-linux-gnueabi

      Configured with: /work/builddir/src/gcc-4.6.4/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-arm1176jzfssf-linux-gnueabi --prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4 --with-sysroot=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot --enable-languages=c,c++ --with-arch=armv6zk --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp --with-pkgversion=‘crosstool-NG hg+default-2685dfa9de14 - tc0002’ --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-mpfr=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-mpc=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-ppl=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-cloog=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-libelf=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools --with-host-libstdcxx=’-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm’ --enable-threads=posix --enable-target-optspace --without-long-double-128 --disable-nls --disable-multilib --with-local-prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot --enable-c99 --enable-long-long

      Thread model: posix

      gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 - tc0002)

    2.制作uboot

    1.开发板光盘自带的uboot启动时只能打印 ok ,可参考以下方法解决

    根据uboot.patch (https://download.csdn.net/download/w0725217/10801950)的内容对友善之臂提供的uboot 进行修改即可解决。

    diff -Naur uboot_tiny4412/board/samsung/tiny4412/mem_init_tiny4412.S uboot_tiny4412ok/board/samsung/tiny4412/mem_init_tiny4412.S
    — uboot_tiny4412/board/samsung/tiny4412/mem_init_tiny4412.S 2013-07-29 18:08:00.000000000 +0800
    +++ uboot_tiny4412ok/board/samsung/tiny4412/mem_init_tiny4412.S 2014-06-24 09:31:14.182259182 +0800
    @@ -70,9 +70,9 @@
    ldr r1, =0x00312640
    str r1, [r0, #DMC_MEMCONTROL]

    • ldr r1, =0x40e01323
      ldr r1, =0x40801333
      str r1, [r0, #DMC_MEMCONFIG0]
      ldr r1, =0x60e01323
      ldr r1, =0x80801333
      str r1, [r0, #DMC_MEMCONFIG1]

    ifdef CONFIG_IV_SIZE

    @@ -97,7 +97,7 @@
    str r1, [r0, #DMC_TIMINGPOWER]

    endif

    ifdef MCLK_400

    • ldr r1, =0x4046654f
      ldr r1, =0x6946654f
      str r1, [r0, #DMC_TIMINGROW] @TimingRow
      ldr r1, =0x46400506
      str r1, [r0, #DMC_TIMINGDATA] @TimingData
      @@ -212,9 +212,9 @@
      ldr r1, =0x00312640
      str r1, [r0, #DMC_MEMCONTROL]

      ldr r1, =0x40e01323 @Interleaved?
      ldr r1, =0x40801333 @Interleaved?
      str r1, [r0, #DMC_MEMCONFIG0]
      ldr r1, =0x60e01323
      ldr r1, =0x80801333
      str r1, [r0, #DMC_MEMCONFIG1]

    ifdef CONFIG_IV_SIZE

    @@ -239,7 +239,7 @@
    str r1, [r0, #DMC_TIMINGPOWER]

    endif

    ifdef MCLK_400

    • ldr r1, =0x4046654f
      ldr r1, =0x6946654f
      str r1, [r0, #DMC_TIMINGROW] @TimingRow
      ldr r1, =0x46400506
      str r1, [r0, #DMC_TIMINGDATA] @TimingData
      diff -Naur uboot_tiny4412/board/samsung/tiny4412/tiny4412.c uboot_tiny4412ok/board/samsung/tiny4412/tiny4412.c
      – uboot_tiny4412/board/samsung/tiny4412/tiny4412.c 2013-07-29 13:02:42.000000000 +0800
      ++ uboot_tiny4412ok/board/samsung/tiny4412/tiny4412.c 2014-06-23 16:17:41.480604224 +0800
      @@ -195,6 +195,14 @@
      gd->bd->bi_dram[2].size = PHYS_SDRAM_3_SIZE;
      gd->bd->bi_dram[3].start = PHYS_SDRAM_4;
      gd->bd->bi_dram[3].size = PHYS_SDRAM_4_SIZE;
      gd->bd->bi_dram[4].start = PHYS_SDRAM_5;
      gd->bd->bi_dram[4].size = PHYS_SDRAM_5_SIZE;
      gd->bd->bi_dram[5].start = PHYS_SDRAM_6;
      gd->bd->bi_dram[5].size = PHYS_SDRAM_6_SIZE;
      gd->bd->bi_dram[6].start = PHYS_SDRAM_7;
      gd->bd->bi_dram[6].size = PHYS_SDRAM_7_SIZE;
      gd->bd->bi_dram[7].start = PHYS_SDRAM_8;
      gd->bd->bi_dram[7].size = PHYS_SDRAM_8_SIZE;

    ifdef CONFIG_TRUSTZONE

    gd->bd->bi_dram[nr_dram_banks - 1].size -= CONFIG_TRUSTZONE_RESERVED_DRAM;
    

    diff -Naur uboot_tiny4412/include/configs/tiny4412.h uboot_tiny4412ok/include/configs/tiny4412.h
    — uboot_tiny4412/include/configs/tiny4412.h 2013-07-29 14:29:52.000000000 +0800
    +++ uboot_tiny4412ok/include/configs/tiny4412.h 2014-06-24 09:37:22.378253848 +0800
    @@ -74,9 +74,9 @@
    /* APLL : 1.3GHz /
    //#define CONFIG_CLK_ARM_1200_APLL_1300
    /
    APLL : 1.4GHz /
    -#define CONFIG_CLK_ARM_1200_APLL_1400
    +//#define CONFIG_CLK_ARM_1200_APLL_1400
    /
    APLL : 1.5GHz */
    -//#define CONFIG_CLK_ARM_1500_APLL_1500
    +#define CONFIG_CLK_ARM_1500_APLL_1500

    /* bus clock: 100Mhz, DMC clock 200Mhz */
    //#define CONFIG_CLK_BUS_DMC_100_200
    @@ -278,7 +278,7 @@

    ifdef CONFIG_EVT0_STABLE

    define CONFIG_NR_DRAM_BANKS 2

    else

    -#define CONFIG_NR_DRAM_BANKS 4
    +#define CONFIG_NR_DRAM_BANKS 8

    endif

    define SDRAM_BANK_SIZE 0x10000000 /* 256 MB */

    define PHYS_SDRAM_1 CONFIG_SYS_SDRAM_BASE /* SDRAM Bank #1 */

    @@ -407,6 +407,7 @@
    /*

    • Ethernet Contoller driver
      */

      define CONFIG_CMD_NET
      ifdef CONFIG_CMD_NET

    define CONFIG_NET_MULTI

    2.也可使用文章开头链接提供的uboot

    1、解压缩

    ​ $ tar -xvf uboot_tiny4412_1611(1506).tar

    2、$ cd uboot_tiny4412_changed_version

    3、目录内已经有u-boot.bin可以直接使用,也可重新编译

    ​ $ make tiny4412_config

    ​ $ make

    4、$ cd sd_fuse

    ​ $ make

    5、$ cd sd_fuse/tiny4412

    ​ $ sudo ./sd_fusing.sh /dev/sdb

    6、 底板开关拨到SD卡启动,并打开电源开关

    U-Boot 2010.12 (May 24 2018 - 11:08:34) for TINY4412

    CPU: S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]
    APLL = 1400MHz, MPLL = 800MHz

    Board: TINY4412
    DRAM: 1023 MiB

    vdd_arm: 1.2
    vdd_int: 1.0
    vdd_mif: 1.1

    BL1 version: N/A (TrustZone Enabled BSP)

    Checking Boot Mode … SDMMC
    REVISION: 1.1
    MMC Device 0: 3724 MB
    MMC Device 1: 7456 MB
    MMC Device 2: N/A
    Net: No ethernet found.
    Hit any key to stop autoboot: 0
    TINY4412 #
    TINY4412 #

    3.uboot烧写进eMMC

    1.在上述的基础上,我们来查看设备的分区表信息

    fdisk -p 0
    fdisk -p 1

    应该可以看到如下信息:

    img

    1. 格式化eMMC

    // u-boot模式下输入如下指令来格式化eMMC设备。

    uboot:fdisk -c 1 320 2057 520

    // 执行后会返回分区信息,继续格式话分区1,2,3,4

    uboot:fatformat mmc 1:1 // 这句话意思是对mmc 1设备的第一分区格式作fat格式化。

    uboot:ext3format mmc 1:2

    uboot:ext3format mmc 1:3

    uboot:ext3format mmc 1:4

    上面三个指令是分别对eMMC的分区2,3,4作ext3格式化。到此我们完成了对eMMC的设备的格式化。需要注意的是,如果提示如下错误:

    Error: No MBR is found at SD/MMC.                                          
    Hint: use fdisk command to make partitions.
    则先执行指令"fdisk -c 0",执行过程如下:

    fdisk -c 0

    fdisk is completed

    对emmc初始化后,我们开始使用dnw来下载uboot到emmc中。现在我们就需要装一下linux的dnw工具,注意dnw是下载到内存,把固件数据缓存起来,然后烧录到eMMC中。

    3.安装DNW工具

    1.首先解压缩文件: $ tar xvf dnw_for_linux.tar.gz

    2.编译并加载secbulk.c内核模块:

    ​ $ make

    ​ $ make install

    3.编译完成后,会生成secbulk.ko文件:

    ​ $ cd src/driver

    ​ $ ls

    ​ Makefile Module.symvers secbulk.ko secbulk.mod.o

    ​ modules.order secbulk.c secbulk.mod.c secbulk.o

    ​ modules.order secbulk.c secbulk.mod.c secbulk.o

    4.加载模块到Linux内核:

    ​ $ sudo insmod ./secbulk.ko // 注意要在root权限下

    ​ $ dmesg // 查看是否加载成功

    ​ secbulk:secbulk loaded
    usbcore:registered new interface driversecbulk        (看到这样两行就说明成功了)
    开机的时候不会自动加载.ko文件,这样每次都要先加载才可以使用,此时将其加入开机脚本,
    使其得到自动加载,编辑/etc/init.d/rc.local 在最后加上 insmod /所在路径/secbulk.ko。

    5.DNW安装好了,我们可以把uboot下载到eMMC了

    ​ 1) TINY4412 # emmc open 1

    ​ 提示:eMMC OPEN Success.!!

    ​ 上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧录,烧录完成后可以关闭emmc

    ​ 2) TINY4412 # dnw

    ​ 提示:OTG cable Connected!
    Now, Waiting forDNW to transmit data(等待DNW下载)
    这里要说明一下,以上提示一定要让虚拟机的Linux识别,而不是windows,否则你下载不进去的,我用的方法 是执行完上面指令,立马切换到虚拟机,鼠标点一下Linux系统,然后迅速插拔USB线,Linux就可以识别了,这样就可以正常下载了

    进入uboot所在目录

    ​ 3)$ cd /…/uboot_tiny4412-1506

    ​ # dnw sd_fuse/tiny4412/E4412_N.bl1.bin

    此时u-boot中断会提示传送校验完成,此时已经把bl1.bin通过USB传送到了memeory的0xc0000000起始地址,大小8KB.

    ​ 4)接下来我们烧录bl1.bin到eMMC中,u-boot下继续输入:

    ​ $ mmc write 1 0xc0000000 0 0x10

    ​ 会提示写入信息,说明已经写入成功。这个是把刚才从PC端通过dnw下载下来的bl1.bin固件下载到emmc中,起始0, 16个block, 一个block是512B, 16512=81024=8KB. 这个是bl1.bin的存放位置。

    以此类推,烧录bl2.bin. u-boot.bin, tzsw.bin

    uboot:dnw

    虚拟机: vdnw sd_fuse/tiny4412/bl2.bin

    uboot:mmc write 1 0xc0000000 0x10 0x1C

    uboot:dnw

    虚拟机:dnw u-boot.bin

    uboot:mmc write 1 0xc0000000 0x30 0x21D

    uboot:dnw

    虚拟机:dnw sd_fuse/tiny4412/E4412_tzsw.bin

    uboot:mmc write 1 0xc0000000 0x2c0 0xB8

    启动分区到此全部写入完成,注意一定要关闭emmc

    u-boot下继续输入:#uboot:emmc close 1

    提示:eMMC CLOSE Success.!!

    uboot已烧入到emmc,开关波动到NAND,从emmc启动,uboot输出变成:

    U-Boot 2010.12 (May 24 2018 - 11:08:34) for TINY4412

    CPU: S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]
    APLL = 1400MHz, MPLL = 800MHz

    Board: TINY4412
    DRAM: 1023 MiB

    vdd_arm: 1.2
    vdd_int: 1.0
    vdd_mif: 1.1

    BL1 version: N/A (TrustZone Enabled BSP)

    Checking Boot Mode … EMMC4.41
    REVISION: 1.1
    MMC Device 0: 7456 MB
    MMC Device 1: 3724 MB
    MMC Device 2: N/A
    Net: No ethernet found.
    Hit any key to stop autoboot: 0
    TINY4412 #
    TINY4412 #

    3.制作Linux镜像文件

    这个用友善之臂提供的linux-3.5-20170221

    (1)解压

    ​ 解压 Linux 内核源代码

    ​ $ tar -xvf linux-3.5-20170221

    ​ 但是这个不能直接编译要关掉Trusted

    ​ $ cd linux-3.5

    ​ $ make menuconfig

    ​ System Type —>

    ​ [ ] Support TrustZone-enabled Trusted Execution Environment

    (2)配置

    ​ $ cp tiny4412_linux_defconfig .config

    (3)编译

    ​ $ make -j4

    ​ 最后在 arch/arm/boot 目录下生成 zImage

    (4)下载进eMMC


    ​ ①,利用dnw方式下载内核

    ​ 1.minicom中

    dnw 0x40008000
    

    ​ 2.PC中

    cd /1702/exynos/linux-3.5
    dnw  arch/arm/boot/zImage
    

    成功下载内核到板子

    ​ 3.引导内核 ==> 启动内核

    bootm 0x40008000
    

    ​ ②,利用SD卡下载内核

    	1.关电取出SD卡,并将PC机上的内核zImage拷到SD卡上的第一个分区 fat32
    
    	2.将SD卡插入开发板并且开机
    
    	3.查看SD卡上的内核
    

    ​ fatls mmc 0:1 / //查看第0个MMC设备 第一个分区 的分区目录
    4.读取SD卡上的内核

    ​ fatload mmc 0:1 0x40008000 zImage
    5.引导内核

    ​ bootm 0x40008000
    设置uboot自动读取SD卡上的内核并且启动

    在putty的串口助手(或者minicom)中

    ​ set bootcmd “fatload mmc 0:1 0x40008000 zImage;bootm 0x40008000”

    ​ save

    reset  查看是否会自动启动内核

    ③如果可以成功启动内核,我们接下来把内核写到eMMC中,在①的基础上,步骤如下:

    ​ 1.minicom中

    ​ dnw 0x40008000
    2.PC中

    ​ cd /1702/exynos/linux-3.5
    dnw arch/arm/boot/zImage
    成功下载内核到板子

    ​ 3.写内核到eMMC

    ​ movi write kernel 0 0x40008000
    4.设置自动启动

    ​ set bootcmd “movi read kernel 0 0x40008000;bootm 0x40008000”
    save

    reset看能否启动.如果可以说明成功了.

    4.制作文件系统

    通过网络来挂载的文件系统,所以要搭建nfs环境

    1)安装NFS

    ​ $ sudo apt-get install portmap
    $ sudo apt-get install nfs-kernel-server
    $ sudo apt-get install nfs-common
    2)修改/etc/exports文件
    $ sudo vi /etc/exports
    在文件的末尾添加这一句:

    ​ /home/1702/exynos/filesystem  *(rw,async,no_root_squash,no_subtree_check)

    3)重启NFS服务

    ​ $ sudo exportfs –a

    ​ $ sudo /etc/init.d/nfs-kernel-server restart

    5.安装busybox,

    $ tar xvf busybox-1.22.1.tar.bz2

    $ cd busybox-1.22.1

    $ make menuconfig

    ​ Busybox Settings —>

    ​ Build Options —>

    ​ [*] Build BusyBox as a static binary (no shared libs)

    	 (arm-none-linux-gnueabi-) Cross Compiler prefix   注意 一定要指定交叉编译工具
    

    $ make

    $ file busybox 确认编译生成的是 ARM 平台的(显示为ELF 32-bit LSB executable, ARM)

    $ make install 安装(默认安装路径为_install)

    $ cd _install

    $ ls

    ​ bin linuxrc sbin usr

    $ mkdir dev etc mnt proc var tmp sys root 创建需要的目录

    $ cp ~/store/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a 注意是lib/

    $ du -mh lib 查看lib库的大小

    $ rm lib/*.a 裁剪,删除掉静态库文件

    $ arm-none-linux-gnueabi-strip lib 裁剪掉调试信息 not recognized 有些库是不能strip的 忽略掉

    $ sudo rm lib/libstdc++* 删除不需要的库,确保所有库大小不超过4M

    $ du -mh lib 查看lib库的大小 可能 显示3.4M lib (这里确保小于 8M)

    $ cp /nfs/rootfs/etc -rf . 拷入成熟的参考配置

    $sudo mknod dev/console c 5 1 必须要有 console设备节点

    创建一个目录用来挂载根文件系统

    $ mkdir filesystem

    $ cd filesystem

    $ cp …/busybox-1.22.1/_install/* . -r

    $ mkdir etc/init.d

    $ vim etc/init.d/rcS

    1. 在filesystem/etc/init.d/rcS里修改为如下内容:

    !/bin/sh

    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    runlevel=S
    prevlevel=N
    umask 022
    export PATH runlevel prevlevel
    /bin/mount -a #挂载fstab文件中所有指定的文件系统
    echo /sbin/mdev>/proc/sys/kernel/hotplug
    mdev -s #在/dev目录下建立必须的设备节点
    /bin/hostname -F /etc/sysconfig/HOSTNAME
    ifconfig eth0 192.168.0.10 # 设置ip地址非常重要,一定要跟服务器的地址再同一个网段

    1. $vim etc/inittab

      ::sysinit:/etc/init.d/rcS
      ::askfirst:-/bin/sh
      ::ctrlaltdel:/sbin/reboot
      ::shutdown:/bin/mount -a -r

      3.$vim 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

      4.$ vim etc/profile

      !/bin/sh

      ulimit -S -c 0>/dev/null 2>&1
      USER=“id -un”
      LOGNAME=KaTeX parse error: Expected 'EOF', got '#' at position 26: …[root@tiny4412]#̲' PATH=PATH
      HOSTNAME=‘bin/hostname’
      export USER LOGNAME PS1 PATH

      5.$ cd …/

      $ sudo chmod 777 filesystem

      6.uboot启动内核网络挂载根文件系统

      setenv gatewayip 192.168.0.1
      setenv ipaddr 192.168.0.xxx //板子的IP
      setenv serverip 192.168.0.xxx //PC机IP
      setenv ethaddr 00:0c:29:a7:9b:2c

      setenv bootargs “root=/dev/nfs nfsroot=192.168.0.111:/home/linux/Tiny4412/filesystem ip=192.168.0.10 init=/linuxrc console=ttySAC0,115200”

      saveenv

      reset

      uboot加载内核并通过网络挂载文件系统

    [ 6.825000] device=eth0, addr=192.168.0.10, mask=255.255.255.0, gw=255.255.255.255
    [ 6.825000] host=192.168.0.10, domain=, nis-domain=(none)
    [ 6.825000] bootserver=255.255.255.255, rootserver=192.168.0.111, rootpath=
    [ 6.830000] hotplug_policy_init: intialised with policy : DVFS_NR_BASED_HOTPLUG
    [ 6.840000] ALSA device list:
    [ 6.840000] No soundcards found.
    [ 6.985000] VFS: Mounted root (nfs filesystem) on device 0:10.
    [ 6.985000] Freeing init memory: 212K

    Please press Enter to activate this console.
    0
    [root@tiny4412]#ls
    bin etc linuxrc opt root sys usr
    dev lib mnt proc sbin tmp var
    [root@tiny4412]#

    展开全文
  • (3)启动时UBOOT将根文件系统内核拷贝RAM中何处在哪里设置? (4)UBOOT 如何知道内核与根文件系统的格式和大小? (5)内核启动参数在编译UBOOT时候哪里指定? (6)内核启动后如何知道在...
    (1)内核默认运行地址和加载地址在哪里设置?

    (2)从FLASH什么地址找内核和根文件系统,UBOOT在哪里设置?

    (3)启动时UBOOT将根文件系统和内核拷贝到RAM中何处在哪里设置?

    (4)UBOOT 如何知道内核与根文件系统的格式和大小?

    (5)内核启动参数在编译UBOOT时候哪里指定?

    (6)内核启动后如何知道在SDRAM中何处找到根文件系统来挂载?如何知道根文件系统大小和格式?

    (7)内核如何知道UBOOT欲传递给内核的参数放在SDRAM中何处?

    (8)内核编译时候的运行地址在哪里指定?内核是位置无关码吗?

    (9)友善之臂MINI2440的说明书写道:
    由于本系统采用了可读写文件系统 yaffs(在嵌入式系统中,专门管理 Flash 存储器的
    一种文件系统),因此可以很方便的动态保存数据,掉电后不会丢失。开机后在串口终端运行
    以下命令: #cp / shanghaitan.mp3 /home/plg 此时将在/home/fa目录下复制一个同样的文件,然后关机,重新开启系统,可以查看
    到/home/plg 目录下的文件依然存在。

    ----- 根文件系统不是已经搬运到在RAM中了?COPY文件是在RAM中啊怎么会写到FLASH里呢?


    (10)内核启动参数在配置内核时候可以选。BOOTLOADER也可以传参数。这两种参数是互补的关系还是谁优先的关系(如果有冲突的话)?

    (11)  友善的板子SUPERVIVI/UBOOT从NOR启动然后可以烧写文件到NAND,但是不能从NAND启动然后烧写文件到NOR ----烧文件到NOR需要HJTAG或者

    JLINK,BOOTLOADER,如UBOOT有支持烧写NOR的吗?



    (12) 配置内核(或VIVI)运行MAKE MENUCONFIG 时是否顶层如果已经有专门配好的设置.config,make就会自动调入.config的配置,但是如果没有.config按照哪个默认值显示呢?

    (13)LINUX内核和根文件系统映像在NAND中的起始地址和大小的信息,是不是要UBOOT在程序中写死,这样的话,对某一个特定版本的UBOOT,LINUX内

    核和根文件系统就不能在NAND中任意位置烧写了。还是,内核和根文件系统在NAND中的位置和大小都是可变的,同一个版本的UBOOT可以智能地检测

    出这些信息从而正常启动linux?

    (14) 修改UBOOT代码让UBOOT支持“JFFS2/CRAMFS/YAFFS” -------- 这句话是什么意思? uboot的作用不就是把FLASH里的根文件系统搬运到SDRAM里吗?管它是什么格式能COPY到SDRAM不久行了吗?

    (15)据说lINUX内核可以在FLASH本地也可以加载到内存中运行,UBOOT是哪种方式?编译UBOOT可以选择用哪种方式吗?


    关于问题的解答:

    1. 看《嵌入式LINUX应用开发完全手册》302页
    2. UBOOT里有环境变量,UBOOT启动后,会根据bootcmd这个环境变量来执行命令。就是在这个环境变量里写明:从哪里读出内核;
    文件系统在哪里,是由内核来确定的,建议你先按顺序好好看书。
    3. 启动时UBOOT不拷贝根文件系统,把内核拷贝到哪里,请看bootcmd环境变量
    4. UBOOT不管文件系统,内核就是一个可以直接运行的映象,没什么特殊格式
    5. 自己看UBOOT那章
    6. 内核启动后,不是在SDRAM中找文件系统,而是在FLASH上找,你看内核移植、根文件系统那2章
    7. 看UBOOT那章
    8. 看内核那章,内核开始一小部分的代码是位置无关的
    9. 跟RAM没有关系
    10. 传递的参数优先
    11. 有,本论坛的UBOOT就可以直接烧写NOR
    12. 试试就知道
    13. UBOOT只管内核在哪,这个地址可以通过命令设置,不是写死;
        文件系统由内核来找,这个地址一般是写死在内核中
    14. 支持烧写这些文件系统类型的映象文件
    15. 内核可以在NOR上直接运行,这跟UBOOT没关系,UBOOT只是负责初始化一下硬件,然后可能的话把内核复制到SDRAM中,然后启动内核;
      如果是NOR上运行内核,那么UBOOT初始化完硬件后,直接启动内核

    展开全文
  • !...这是u-boot启动画面,还有那个环境变量无法读取但是且能够保存,不知道是什么情况,如果有大神能够告诉我,就十分...这是文件系统启动画面,启动到哪里就卡住了,不知道为什么?希望能快点解决这个问题,谢谢了!!
  • 转自: 关于UBOOT,LINUX内核编译,根文件系统的15个...(3)启动时UBOOT将根文件系统内核拷贝RAM中何处在哪里设置? (4)UBOOT 如何知道内核与根文件系统的格式和大小? (5)内核启动参数在编译

    转自:

    http://hi.baidu.com/ezqztzimzsesvwr/item/02b91a7d79f2fb580d0a07e4

    关于UBOOT,LINUX内核编译,根文件系统的15个弱智问题(转)

    (1)内核默认运行地址和加载地址在哪里设置?

    (2)从FLASH什么地址找内核和根文件系统,UBOOT在哪里设置?

    (3)启动时UBOOT将根文件系统和内核拷贝到RAM中何处在哪里设置?

    (4)UBOOT 如何知道内核与根文件系统的格式和大小?

    (5)内核启动参数在编译UBOOT时候哪里指定?

    (6)内核启动后如何知道在SDRAM中何处找到根文件系统来挂载?如何知道根文件系统大小和格式?

    (7)内核如何知道UBOOT欲传递给内核的参数放在SDRAM中何处?

    (8)内核编译时候的运行地址在哪里指定?内核是位置无关码吗?

    (9)友善之臂MINI2440的说明书写道:
    由于本系统采用了可读写文件系统 yaffs(在嵌入式系统中,专门管理 Flash 存储器的
    一种文件系统),因此可以很方便的动态保存数据,掉电后不会丢失。开机后在串口终端运行
    以下命令: #cp / shanghaitan.mp3 /home/plg 此时将在/home/fa目录下复制一个同样的文件,然后关机,重新开启系统,可以查看
    到/home/plg 目录下的文件依然存在。 

    ----- 根文件系统不是已经搬运到在RAM中了?COPY文件是在RAM中啊怎么会写到FLASH里呢?


    (10)内核启动参数在配置内核时候可以选。BOOTLOADER也可以传参数。这两种参数是互补的关系还是谁优先的关系(如果有冲突的话)?

    (11) 友善的板子SUPERVIVI/UBOOT从NOR启动然后可以烧写文件到NAND,但是不能从NAND启动然后烧写文件到NOR ----烧文件到NOR需要HJTAG或者

    JLINK,BOOTLOADER,如UBOOT有支持烧写NOR的吗?



    (12) 配置内核(或VIVI)运行MAKE MENUCONFIG 时是否顶层如果已经有专门配好的设置.config,make就会自动调入.config的配置,但是如果没有.config按照哪个默认值显示呢?

    (13)LINUX内核和根文件系统映像在NAND中的起始地址和大小的信息,是不是要UBOOT在程序中写死,这样的话,对某一个特定版本的UBOOT,LINUX内

    核和根文件系统就不能在NAND中任意位置烧写了。还是,内核和根文件系统在NAND中的位置和大小都是可变的,同一个版本的UBOOT可以智能地检测

    出这些信息从而正常启动linux?

    (14) 修改UBOOT代码让UBOOT支持“JFFS2/CRAMFS/YAFFS” -------- 这句话是什么意思? uboot的作用不就是把FLASH里的根文件系统搬运到SDRAM里吗?管它是什么格式能COPY到SDRAM不久行了吗?

    (15)据说lINUX内核可以在FLASH本地也可以加载到内存中运行,UBOOT是哪种方式?编译UBOOT可以选择用哪种方式吗?

    1. 看《嵌入式LINUX应用开发完全手册》302页
    2. UBOOT里有环境变量,UBOOT启动后,会根据bootcmd这个环境变量来执行命令。就是在这个环境变量里写明:从哪里读出内核;
    文件系统在哪里,是由内核来确定的,建议你先按顺序好好看书。
    3. 启动时UBOOT不拷贝根文件系统,把内核拷贝到哪里,请看bootcmd环境变量
    4. UBOOT不管文件系统,内核就是一个可以直接运行的映象,没什么特殊格式
    5. 自己看UBOOT那章
    6. 内核启动后,不是在SDRAM中找文件系统,而是在FLASH上找,你看内核移植、根文件系统那2章
    7. 看UBOOT那章
    8. 看内核那章,内核开始一小部分的代码是位置无关的
    9. 跟RAM没有关系
    10. 传递的参数优先
    11. 有,本论坛的UBOOT就可以直接烧写NOR
    12. 试试就知道
    13. UBOOT只管内核在哪,这个地址可以通过命令设置,不是写死;
    文件系统由内核来找,这个地址一般是写死在内核中
    14. 支持烧写这些文件系统类型的映象文件
    15. 内核可以在NOR上直接运行,这跟UBOOT没关系,UBOOT只是负责初始化一下硬件,然后可能的话把内核复制到SDRAM中,然后启动内核;
    如果是NOR上运行内核,那么UBOOT初始化完硬件后,直接启动内核

    展开全文
  • (3)启动时UBOOT将根文件系统内核拷贝RAM中何处在哪里设置? (4)UBOOT 如何知道内核与根文件系统的格式和大小? (5)内核启动参数在编译UBOOT时候哪里指定? (6)内核启动后如何知道在SDRAM中...

    (1)内核默认运行地址和加载地址在哪里设置?

    (2)从FLASH什么地址找内核和根文件系统,UBOOT在哪里设置?

    (3)启动时UBOOT将根文件系统和内核拷贝到RAM中何处在哪里设置?

    (4)UBOOT 如何知道内核与根文件系统的格式和大小?

    (5)内核启动参数在编译UBOOT时候哪里指定?

    (6)内核启动后如何知道在SDRAM中何处找到根文件系统来挂载?如何知道根文件系统大小和格式?

    (7)内核如何知道UBOOT欲传递给内核的参数放在SDRAM中何处?

    (8)内核编译时候的运行地址在哪里指定?内核是位置无关码吗?

    (9)友善之臂MINI2440的说明书写道:
    由于本系统采用了可读写文件系统 yaffs(在嵌入式系统中,专门管理 Flash 存储器的
    一种文件系统),因此可以很方便的动态保存数据,掉电后不会丢失。开机后在串口终端运行
    以下命令: #cp / shanghaitan.mp3 /home/plg 此时将在/home/fa目录下复制一个同样的文件,然后关机,重新开启系统,可以查看
    到/home/plg 目录下的文件依然存在。

    ----- 根文件系统不是已经搬运到在RAM中了?COPY文件是在RAM中啊怎么会写到FLASH里呢?


    (10)内核启动参数在配置内核时候可以选。BOOTLOADER也可以传参数。这两种参数是互补的关系还是谁优先的关系(如果有冲突的话)?

    (11) 友善的板子SUPERVIVI/UBOOT从NOR启动然后可以烧写文件到NAND,但是不能从NAND启动然后烧写文件到NOR ----烧文件到NOR需要HJTAG或者

    JLINK,BOOTLOADER,如UBOOT有支持烧写NOR的吗?



    (12) 配置内核(或VIVI)运行MAKE MENUCONFIG 时是否顶层如果已经有专门配好的设置.config,make就会自动调入.config的配置,但是如果没有.config按照哪个默认值显示呢?

    (13)LINUX内核和根文件系统映像在NAND中的起始地址和大小的信息,是不是要UBOOT在程序中写死,这样的话,对某一个特定版本的UBOOT,LINUX内

    核和根文件系统就不能在NAND中任意位置烧写了。还是,内核和根文件系统在NAND中的位置和大小都是可变的,同一个版本的UBOOT可以智能地检测

    出这些信息从而正常启动linux?

    (14) 修改UBOOT代码让UBOOT支持“JFFS2/CRAMFS/YAFFS” -------- 这句话是什么意思? uboot的作用不就是把FLASH里的根文件系统搬运到SDRAM里吗?管它是什么格式能COPY到SDRAM不久行了吗?

    (15)据说lINUX内核可以在FLASH本地也可以加载到内存中运行,UBOOT是哪种方式?编译UBOOT可以选择用哪种方式吗?

     

     

     

     

    1. 看《嵌入式LINUX应用开发完全手册》302页
    2. UBOOT里有环境变量,UBOOT启动后,会根据bootcmd这个环境变量来执行命令。就是在这个环境变量里写明:从哪里读出内核;
    文件系统在哪里,是由内核来确定的,建议你先按顺序好好看书。
    3. 启动时UBOOT不拷贝根文件系统,把内核拷贝到哪里,请看bootcmd环境变量
    4. UBOOT不管文件系统,内核就是一个可以直接运行的映象,没什么特殊格式
    5. 自己看UBOOT那章
    6. 内核启动后,不是在SDRAM中找文件系统,而是在FLASH上找,你看内核移植、根文件系统那2章
    7. 看UBOOT那章
    8. 看内核那章,内核开始一小部分的代码是位置无关的
    9. 跟RAM没有关系
    10. 传递的参数优先
    11. 有,本论坛的UBOOT就可以直接烧写NOR
    12. 试试就知道
    13. UBOOT只管内核在哪,这个地址可以通过命令设置,不是写死;
    文件系统由内核来找,这个地址一般是写死在内核中
    14. 支持烧写这些文件系统类型的映象文件
    15. 内核可以在NOR上直接运行,这跟UBOOT没关系,UBOOT只是负责初始化一下硬件,然后可能的话把内核复制到SDRAM中,然后启动内核;
    如果是NOR上运行内核,那么UBOOT初始化完硬件后,直接启动内核

    展开全文
  • linux内核启动到busybox命令实现

    千次阅读 2013-10-24 09:01:55
    我们都知道在linux内核启动的第一个进程叫做init进程,但是我们知道这个进程是从哪里来的?是从Linux内核里面出来的还是从其他地方。说这里,我们就要联系我们在制作文件系统的时候用到的一个工具,这个工具叫做...
  • 我们按下电源键,计算机第一个执行的程序就是MBR上面的BootLoader,同时,BIOS还会完成一些硬件的初始化等,接下来呢BootLoader就要去加载内核文件到内存,然后将内核文件解压,完成内核文件的加载,从这里开始BIOS...
  • 内核启动流程

    2015-10-22 15:03:53
    BIOS (Boot sequence)(决定到哪里启动操作系统的顺利)--MBR(bootloader ,446bit) -->Kernel (文件系统、进程管理、内存管理、网络管理、安全功能、驱动程序)-->initrd --/sbin/in...
  • CentOS 6系统启动流程

    2017-05-14 11:53:00
    这里大概介绍一下系统启动的大概框架仅限CentOS 6 启动流程,因为系统版本不同启动也是有区别的,方便看到系统启动哪里出问题可以及时排错,也是因为说深了臣妾也做不啊~ 系统内核是基于模块化的".ko",而且...
  • 具体做法是在启动页面,选择要启动内核 按 E,结果我按了E后,找不linux16那一行,仔细一看,还有个光标向下的箭头,接着向下按,找到了,改好后如图: 然后按ctrol+X,系统可以启动了,启动后检查配置文件/etc...
  • 本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换硬盘的过程。 描述起于:linux-2.6.11/init/main.c中函数 static int init(void * unused) 描述止于:/etc/rc.d/rc.sysinit文件的被调用 ...
  • linux 启动流程详解

    2011-11-01 16:07:10
    本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换硬盘的过程。 描述起于:linux-2.6.11/init/main.c中函数 static int init(void * unused) 描述止于:/etc/rc.d/rc.sysinit文件的被调用 ...
  • 本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换硬盘的过程。 描述起于:linux-2.6.11/init/main.c中函数 static int init(void * unused) 描述止于:/etc/rc.d/rc.sysinit文件的被调用 二、...
  • 关于linux的启动流程的笔记(转)[@more@] CODE: [b]一、从哪里到哪里[/b] 本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换到硬盘的过程。 描述起于:linu...
  • 1. 引言上一篇文章中,我们介绍了如何让汇编语言与C语言相互调用:如何实现汇编语言与C语言之间的相互调用还记得我们自制操作系统的脚步到哪里了呢?没错,已经完成了从启动扇区跳转到loader,那么,下一步就是如何...
  • 原因是为了支持NFS作为根文件系统,而在内核配置的时候选择自动配置IP如下: 但是在内核又不能正确的自动配置,因此就卡在这里了。这个IP参数是在uboot传递过来的。 ip参数的格式如下: ip=:::::: client-ip: ...
  • linux 启动流程详解 ...本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换硬盘的过程。 描述起于:linux-2.6.11/init/main.c中函数 static int init(void * unused) 描述止于:
  • 在系统启动的第二步中,开始执行引导...操作系统的内核通常保存在文件系统中的,但是BIOS并没有文件系统的概念,因此BIOS无法直接启动内核。因此需要加入中间层,系统启动的大概为 BIOS -> BOOTLOADER -> KER.
  • 嵌入式linux快速入门

    2020-08-07 21:58:27
    到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。所以,可以认为 booloader = 裸机集合,它就是一个复杂的单片机程序。③ Linux内核Linux内核的最主要...
  • 到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。所以,可以认为 booloader = 裸机集合,它就是一个复杂的单片机程序。 ③ Linux内核Linux内核的最...
  • Linux从入门精通

    2010-04-25 19:58:09
    9.2.1 增加网络文件系统的安装 9.3 打印机配置 9.4 网络配置 9.4.1 操纵名字 9.4.2 操纵主机 9.4.3 增加网络接口设备 9.4.3.1 PPP接口 9.4.3.2 SLIP接口 9.4.3.3 PLIP接口 9.4.3.4 Ethernet, Arcnet, Token...
  • 《Linux从入门精通》

    热门讨论 2008-09-04 17:05:49
    9.2.1 增加网络文件系统的安装 9.3 打印机配置 9.4 网络配置 9.4.1 操纵名字 9.4.2 操纵主机 9.4.3 增加网络接口设备 9.4.3.1 PPP接口 9.4.3.2 SLIP接口 9.4.3.3 PLIP接口 9.4.3.4 Ethernet, Arcnet, Token...
  • 从上图可以知道:① 组成:嵌入式Linux系统 = bootloader + linux内核 + 根文件系统(里面含有APP)。② bootloader:它的目的是启动内核,去哪读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash...
  • 从上图可以知道:① 组成:嵌入式Linux系统 = bootloader + linux内核 + 根文件系统(里面含有APP)。② bootloader:它的目的是启动内核,去哪读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash...
  • ① 组成:嵌入式Linux系统 = bootloader + linux内核 + 根文件系统(里面含有APP)。 ② bootloader:它的目的是启动内核,去哪读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

内核到哪里启动文件系统