xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 新濠国际登录平台 2019-09-30 17:15 的文章
当前位置: 新濠国际登录平台 > 新濠国际登录平台 > 正文

软件包在友善之臂光盘A盘中, 安装完后

1 编译安装QEMU

  1. 首先下载qemu for mini2440

一. uboot 和 kernel 的编译烧写

当前使用的环境为 Ubuntu 16.04 ,用户名为user,我的习惯是在家目录下创建一个 workspace 目录, workspace 目录下分别有 exynos4412( 友善之臂 Cortex-A9 ) 、 i.MX283( 周立功 ARM9 )、stm32( 秉火 Cortex-M ) 等目录,分别是对应的开发板类型。

一、开发板接口接线工具

 开发板与PC机之间可以进行连接的接口通常有四个:串口、JTAG、USB、网络接口。而如今在PC端是没有JTAG或者接口的,因此可以使用转接板转换为并口或者USB口与PC段相连。
新濠国际登录平台 1
 JTAG最初是用来对芯片进行测试的,JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。如今,JTAG接口还常用于实现ISP(In-System Programmer,在系统编程),对FLASH等器件进行编程。在2440中,当需要对NOR Flash进行烧写时,就需要用到JTAG接口进行烧录软件,而当软件是要烧录到NAND Flash时,使用串口与USB接口就可以操作。这里介绍NOR Flash、NAND Flah与SDRAAM的区别。
 ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

芯片 特点
静态RAM(Static RAM/SRAM),是目前读写最快的存储设备,但是它也非常昂贵;
RAM 动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,但从价格上来说DRAM相比SRAM要便宜很多;
DDR RAM(Date-Rate RAM)也称作DDR SDRAM(Synchronous Dynamic RAM),可以在一个时钟读写两次数据,这样就使得数据传输速度加倍。

 目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此众多NAND Flash的开发板除了使用NAND Flah以外,还有一块小的NOR Flash来运行启动代码。
 在2440开发板中,通常将uboot烧写在nor flash上作为引导程序,而linux kernel与根文件系统烧录在nand flash上,而这些代码会加载到SDRAM中运行。

首先下载qemu for mini2440,直接打包下载 

git clone git://repo.or.cz/qemu/mini2440.git  qemu

1.1 安装交叉编译器 arm-linux-gcc

获取 arm-linux-gcc 软件包

软件包在友善之臂光盘A盘中,具体位置为:
A盘-2013-09/Linux/arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
或者点击这里下载。

解压到指定目录

$ tar -zxvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C ~/software/

配置相关环境变量,将交叉编译器的 bin 目录追加到 PATH 环境变量之后。打开家目录下的 ~/.bashrc 文件,在其后追加一行

export PATH=~/software/opt/FriendlyARM/toolschain/4.5.1/bin:$PATH

然后执行修改过的文件,是配置生效。

$ . .bashrc             # 执行 .bashrc 文件
$ arm-linux-gcc -v      # 输出版本信息,安装配置成功  

二、在TQ2440中开发板程序的烧录

 一个linux文件系统的构成可分为硬件、bootloader、内核、根文件系统四个层次。首先要想硬件可以工作工作,需要有bootloader引导程序,它设置硬件相关参数以及软件变量,如设置中断变量、关闭看门狗、初始化串口、时钟等硬件参数,设置堆栈等。要完成这些操作,那么UBOOT代码就必须上电就能自动运行,通常将这些代码烧录在NOR Flash中,因为NAND Flash无法运行代码,而linux kernel、 root filesystem则烧录到nand flash中等待bootloader引导完成加载到SDRAM中运行。
1. 使用J-link烧写u-boot到Nor Flash
 编译uboot具体操作步骤为:
1、解压u-boot1.1.6,进入解压后的目录
2、打补丁
3、使用arm-linux-gcc3.4.5编译器编译

book/home/test/1_bare_metal/1_test$ tar xjf u-boot-1.1.6.tar.bz2 
book/home/test/1_bare_metal/1_test$ cd u-boot-1.1.6/
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ patch -p1 < ../u-boot-1.1.6_jz2440.patch
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ arm-linux-gcc -v
Reading specs from /work/tools/gcc-3.4.5-glibc-2.3.6/lib/gcc/arm-linux/3.4.5/specs
Configured with: /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6 --with-float=soft --with-headers=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include --with-local-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.5
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ make 100ask24x0_config
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ make 

烧写uboot:
1、JLink 的 USB 口接到电脑上,JTAG 口用排线和开发板的 JTAG 口相连, 开发板设为 Nor Flash 启动并上电。
2、启动 J-Flash, 它在“Windows 开始菜单->所有程序->SEGGER”里面。
3、选择菜单“File -> Open -> Open Project…”,打开光盘里的 s3c2440.jflash。
新濠国际登录平台 2
4、选择菜单“Target -> Connect”
新濠国际登录平台 3
5、选择菜单“File -> Open”,打开要烧写的二进制文件,比如 u-boot.bin,并且在“Start address”里输入 0。
6、选择菜单“Target -> Auto”即可自动烧写。
7、重启开发板,启动uboot。

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[o] Download u-boot to Nor Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection:

2. 使用DNW和串口工具CRT烧写Linux内核和根文件系统
编译Linux内核的步骤为:
1、解压linux2.6.22,进入解压后的目录
2、打补丁
3、使用arm-linux-gcc3.4.5编译器编译

book/home/test/1_bare_metal/1_test$ tar xjf linux-2.6.22.6.tar.bz2 
book/home/test/1_bare_metal/1_test$ cd linux-2.6.22.6/
book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ patch -p1 < ../linux-2.6.22.6_jz2440.patch

4、这里我是用的是TQ2440开发板,因此韦老师的linux内核源码不能直接使用在TQ2440开发板上,需要对LCD和DM9000两个驱动程序进行修改。
将TQ2440源码drivers_and_test17th_dm9000c修改好的dm9dev9000c.c复制到linux-2.6.22.6/drivers/net目录下;
修改其Makefile:obj-$(CONFIG_DM9000) += dm9dev9000c.o #dm9000.o
将TQ2440源码drivers_and_test10th_lcd4thlcd.c复制到linux-2.6.22.6/drivers/video目录下,并修改其Makefile:obj-$(CONFIG_FB_S3C2410) += lcd.o #s3c2410fb.o
5、修改config_ok为.config
book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ cp config_ok .config
6、编译make uImage,此事可能出现错误:

book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ make uImage
Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
/home/test/1_bare_metal/1_test/linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax
/home/test/1_bare_metal/1_test/linux-2.6.22.6/Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
make[1]: *** No rule to make target 'silentoldconfig'。 停止。
  CHK     include/linux/version.h
make: *** No rule to make target 'include/config/auto.conf', needed by 'include/asm-arm/.arch'。 停止。

根据提示修改这两行Makefile:
在makefile中将416行代码:config %config: scripts_basic outputmakefile FORCE
改为:%config: scripts_basic outputmakefile FORCE
在makefile中将1449行代码:/ %/: prepare scripts FORCE
改为:%/: prepare scripts FORCE
再次编译,编译成功。

    ...
UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.22.6
Created:      Fri Dec 29 20:05:44 2017
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1845828 Bytes = 1802.57 kB = 1.76 MB
Load Address: 0x30008000
Entry Point:  0x30008000
  Image arch/arm/boot/uImage is ready
book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ 

7、在串口界面输入k命令下载uImage,使用dnw下载数据。

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[o] Download u-boot to Nor Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection: k
USB host is connected. Waiting a download.

8、在串口界面输入y命令下载根文件系统,使用dnw下载数据。

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[o] Download u-boot to Nor Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection: y
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30000000h,TOTAL:49769290]
RECEIVED FILE SIZE:49769290 (725KB/S, 67S)

NAND erase: device 0 offset 0x260000, size 0xfda0000
Erasing at 0xffa0000 --   3% complete.
OK

NAND write: device 0 offset 0x260000, size 0x2f76b40

Writing data at 0x3033800 --  13% complete.
 49769280 bytes written: OK

9、启动开发板,查看效果。

Warning: firstuse finished 1
tsdev (compaq touchscreen emulation) is scheduled for removal.
See Documentation/feature-removal-schedule.txt for details.
Warning: TimeZone::data Can't create a valid data object for 'Europe/Oslo'
Warning: Unable to open /root/Settings/Categories.xml
Warning: could not register server

starting pid 772, tty '/dev/s3c2410_serial0': '/bin/sh'
# 
# ls
bin         lib         mnt         root        tmp
dev         linuxrc     opt         sbin        usr
etc         lost+found  proc        sys
# 

新濠国际登录平台 4
3. 使用tftp网络烧写Linux内核和根文件系统
 当开发板中安装好uboot后,还可以使用网络tftf下载linux内核与根文件系统,此时当tftp服务器为win7时,要保证开发板与PC机之间可以ping通。这里我采用开发板与PC机直接使用网线相连,PC机有线IP为192.168.2.20;开发板IP为192.168.2.10。

OpenJTAG> set ipaddr 192.168.2.10
OpenJTAG> set serverip 192.168.2.20
OpenJTAG> save
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
OpenJTAG> printenv
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
bootdelay=2
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)
partition=nand0,0
mtddevnum=0
mtddevname=bootloader
ipaddr=192.168.2.10
serverip=192.168.2.20

Environment size: 450/131068 bytes

新濠国际登录平台 5
1、PC机tftp端设置,将需要下载的内核与根文件系统放在服务器目录下。
新濠国际登录平台 6
2、开发板进入uboot命令行界面下载kernel:
tftp 30000000 uImage
mtdpart 查看分区信息
nand erase kernel
nand write.jffs2 30000000 kernel
3、下载根文件系统
tftp 30000000 fs_qtopia.yaffs2
nand erase root
nand write.yaffs 30000000 260000(root分区地址) 2fb6b40(大小)
4、开发板启动效果:
新濠国际登录平台 7
4. 使用NFS服务器挂载内核和根文件系统
 使用NFS下载方法与tftp下载方式,大致相同,此时要确保开发板可以和虚拟机ubuntu能ping通。同时要设置虚拟机已经开启了nfs服务,并设置了挂载点:

book~$  cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
/work/nfs_root  *(rw,sync,no_root_squash)      #挂载目录

1、下载内核
nfs 30000000 192.168.1.123:/work/nfs_root/uImage
nand erase kernel
nand write.jffs2 30000000 kernel
2、下载根文件系统
nfs 30000000 192.168.1.123:/work/nfs_root/fs_qtopia.yaffs2
nand erase root
nand write.yaffs 30000000 26000 2f76b40

 

如果感觉速度慢,直接打包下载

1.2 安装串口终端 kermit

$ sudo apt-get install ckermit

编写配置文件

在用户家目录下创建一个 kermit 的配置文件:~/.kermrc,其内容为:

set line /dev/ttyS0      # 如果是 USB 转串口连接的开发板,修改为 ttyUSB0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec  pack 1000
set send pack 1000
set window 5

直接进入终端

$ sudo kermit -c

这里 -c 表示 connect ,不加 -c 选项则进入命令模式,命令模式输入 c 也可以进入终端。
终端模式下,先同时按住 Ctrl+,再按 c 可以返回命令模式。

解压后,进入源代码目录中:

1.2 烧写 uboot

获取 uboot 源码包

源码包在友善之臂光盘A盘中,具体位置为:
A盘-2013-09/uboot/uboot_tiny4412-20130729.tgz
或者点击这里下载。

解压 uboot 到指定目录

进入到 uboot 源码所在目录,执行解压命令。

$ tar -zxvf uboot_tiny4412-20130729.tgz -C ~/workspace/exynos4412/source/

这里通过 -C 参数指定解压到 ~/workspace/exynos4412/source/ 目录下,解压后 ~/workspace/exynos4412/source/ 目录下出现 uboot_tiny4412 目录

sudo apt-get install zlib1g-dev
sudo apt-get install libsdl-dev

解压后,今日源代码的主目录中,

1.3 配置 uboot

$ make clean                 # 清除编译生成的文件
$ make distclean             # 清除配置
$ make tiny4412_config       # 配置 uboot

(prefix指定安装路径,这里是$HOME/work/mini2440)

  1. # ./configure --target-list=arm-softmmu # make -j4  

    # ./configure --target-list=arm-softmmu # make -j4

  2. 下载u-boot for mini2440

1.4 编译 uboot

$ make -j16                  # -j16 参数表示16线程编译, 可以加快编译速度
./configure --target-list=arm-softmmu --prefix=$HOME/work/mini2440
make -j4
make install 

git clone  git://repo.or.cz/w/u-boot-openmoko/mini2440.git  uboot

1.5 烧写 uboot 到 SD 卡

友善之臂给我们提供了烧写 uboot 的脚本程序:uboot_tiny4412/sd_fuse/tiny4412/sd_fusing.sh
执行该脚本可以将 uboot 烧写进 SD 卡中

$ sudo ./sd_fusing.sh /dev/sdb

 安装完后,添加环境变量:

或者打包下载

1.3 烧写 kernel

sudo vim /etc/bash.bashrc

1.获取内核源码包

源码包在友善之臂光盘A盘中,具体位置为:
A盘-2013-09/Linux/linux-3.5-20150929.tgz

 添加一行:

(注意 采用打包下载的时候这几个包的文件名可能相同,注意区分)解压后,配置Makefile文件,打开Makefile文件,CROSS_新濠国际登录平台,COMPILE变量赋值,即自己所使用的交叉编译工具链,比如我的是arm-none-linux-gnueabi-,保存退出,输入

2.解压内核到指定目录下

进入到内核源码所在目录,执行解压命令。

$ tar -zxvf linux-3.5-20150929.tgz -C ~/workspace/exynos4412/source/

这里通过 -C 参数指定解压到 ~/workspace/exynos4412/source/ 目录下,解压后 ~/workspace/exynos4412/source/ 目录下出现 linux-3.5 目录

export PATH=$PATH:$HOME/work/mini2440/bin 
  1. # make mini2440_config # make -j4  

    # make mini2440_config # make -j4

3.配置 Linux 内核

进入到刚刚解压出来的 linux-3.5 目录下,依次执行下列步骤:

$ make clean                          # 清除编译生成的文件
$ make distclean                      # 清除配置
$ cp tiny4412_linux_defconfig .config # 拷贝官方的配置文件配置Linux内核
$ make menuconfig                     # 进入内核图形化配置界面

新濠国际登录平台 8

这里写图片描述

移动光标到 System Type ---> [*] Support TrustZone-enabled Trusted Execution Environment 这里

新濠国际登录平台 9

这里写图片描述

通过空格键,取消其选中状态,不选中它,最后保存退出。

保存退出后,用source 生效或者注销重新登录

稍等两分钟,即在当前目录下生成名为 u-boot.bin 的文件,注意如果想在之后使用u-boot 的nfs下载文件功能,需要修改代码中的一部分,将net/nfs.c文件中的

4.编译内核

$ make -j16

编译成功后会生成 linux 内核映像文件,映像文件位于: linux-3.5/arch/arm/boot/zImage

如果没有生成 zImage 文件,接着 make 一次,不要加 -j16 参数,查看其错误信息。

新濠国际登录平台 10

这里写图片描述

错误提示信息已经写的很清楚了:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373. 提示我们说这里应该省略 defined() 。

打开 linux-3.5/kernel/timeconst.pl 文件。

/* 372 */   @val = @{$canned_values{$hz}};
/* 373 */   if (!defined(@val)) {
/* 374 */       @val = compute_values($hz);
/* 375 */   }
/* 376 */   output($hz, @val);

我们应该修改第373行,将改为 if (!defined(@val)) 改为 if(!@val) 就可以了。

source /etc/bash.bashrc

NFS_TIMEOUT = 2UL 修改为 NFS_TIMEOUT = 20000UL 否则会造成nfs文件下载失败,如果不使用nfs下载功能,不改也可。

5.烧写内核到 SD 卡

进入到 zImage 所在目录,执行烧写命令。

$ sudo dd iflag=dsync oflag=dsync if=zImage of=/dev/sdb seek=1057

dd命令:向存储器设备写入数据。

  • 参数:
    dd iflag=dsync oflag=dsync if=<将要烧写的文件> of=<烧写的目标设备> seek=<跳过块数量>
  • 块的单位:512字节
  • dsync:表示带缓冲

这里跳过 1057 个块是因为友善之臂的 uboot 默认从 SD 卡的 1057 个块加载内核。

测试是否正常:

  1. 下载 linux kernel for mini2440

uboot 环境变量和根文件系统制作

qemu-system-arm --version

(下载步骤略去)

一 相关软件

 

进入源码目录

1.nfs-kernel-server 服务器

2 使用buildroot一键生成uboot和linux内核及根文件系统

  1. # make mini2440_defconfig ARCH=arm #make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage  

    # make mini2440_defconfig ARCH=arm #make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

NFS 介绍

NFS 即网络文件系统(Network File-System),可以通过网络让不同机器、不同系统之间可以实现文件共享。通过 NFS,可以访问远程共享目录,就像访问本地磁盘一样。
在 ubuntu 主机上安装 nfs 服务器,开发板便可以通过网络访问 ubuntu 主机上的共享的文件。

首先下载buildroot的源代码,下载地址: 

之后会在arch/arm/boot/目录下生成uImage 文件,将此文件复制到qemu目录下的mini2440文件夹下,并将mini2440文件夹中的mini2440_start.sh作如下修改

安装 NFS 服务器

$ sudo apt-get install nfs-kernel-server       # 安装 NFS 服务器端
$ sudo apt-get install nfs-common              # 安装 NFS 客户端

 

将 kernel 一行改为-kernel "$base/uImage" ,回到上层目录后运行

设置共享目录

安装完 NFS 服务器等相关软件后,需要指定用于共享的 NFS 目录,其方法是在 /etc/exports 文件里面设置对应的目录及相应的访问权限,每一行对应一个设置。下面介绍如何添加 NFS 共享目录。

$ sudo vi /etc/exports

/etc/exports 文件打开后,文件内容为

# /etc/exports: the access control list for filesystems which may be exported
#       to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/home/user/workspace/exynos4412/rootfs *(rw,sync,no_root_squash)

在最后一行追加:

/home/user/workspace/exynos4412/rootfs *(rw,sync,no_root_squash)                              # 其中“*”表示允许任何网段 IP 的系统访问该 NFS 目录

本文由新濠国际登录平台发布于新濠国际登录平台,转载请注明出处:软件包在友善之臂光盘A盘中, 安装完后

关键词: