armlinux学习

2020-02-21 10:06:01 whstudio123 阅读数 4064

写在前面

本文章为我在学习I.MX6ULL ARM Linux时的记录文章,知识来源为《正点原子阿尔法 I.MX6ULL ARM Linux开发板》的视频教程和野火《i.MX Linux开发实战指南》的视频和电子书籍。

学习笔记涉及在学习过程中有关安装,使用,编程,debug的相关知识点和技巧,在一套教程学习完毕后,我将再次整理本笔记,将其中重要的坑点,知识点和一些技巧和问题解决等整理成专栏,敬请大家静待花开,谢谢!

S1:U-Boot

在这里插入图片描述

U-Boot启动界面:(串口)
启动时3秒内按Enter进入U-Boot命令行模式。
在这里插入图片描述
注意:
1.ARM没有PC机中的BIOS,Uboot就类似于BIOS+系统引导程序
2.U-Boot 最重要的功能就是初始化DDR,并将linux镜像和dts设备数拷贝到内存中。
3.大多数的ARM在引导linux之前都需要U-Boot初始化DDR,但有一些ARM的bootROM(就比如I.MX6ULL)会自动初始化DDR,无需U-Boot再初始化了。

S2:正点原子U-Boot编译

在这里插入图片描述
在这里插入图片描述

也可以直接在MakeFile中写好ARCH和CROSS_COMPILE:
在这里插入图片描述

S3:U-Boot基本命令第1讲:help、bdinfo和环境变量命令

1.help命令:?+命令名
例子:

? boot

2.信息查看命令:板子信息

 bdinfo

3.与环境变量有关的命令:

1.setenv(重点):增,删,改环境变量信息
(注意 字符串和带空格的要加单引号把整个串括起来,单纯数字不用引号)
举例:
新增一个名为author 的环境变量,值为whstudio并保存

setenv author 'whstudio'
saveenv

删除一个名为author 的环境变量并保存(将值置为空就是删除)

setenv author
saveenv

修改一个名为author 的环境变量,值为whstudio并保存(环境变量存在就是修改)

setenv author 'whstudio'
saveenv

2.printenv(重点):查环境变量信息
举例:
查看所有环境变量:

printenv

S4:U-Boot基本命令第2讲:内存操作命令

内存操作命令(阅读说明1):

命令 用途 格式 举例 说明
md 显示内存值 md[.b, .w, .l] address [# of objects] md.b 80000000 14 0X80000000 开始的 20 个字节的内存值
nm 修改指定地址的内存值 nm [.b, .w, .l] address nm.l 80000000 以.l 格式修改 0x80000000 地址的数据为 0x12345678(阅读说明2)
mm 修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增 mm [.b, .w, .l] address mm.l 80000000 以.l 格式修改 0x80000000 为起始地址的数据
mw 使用一个指定的数据填充一段内存 mw [.b, .w, .l] address value [count] mw.l 80000000 0A0A0A0A 10 使用.l 格式将以 0X80000000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A
cp 数据拷贝命令 cp [.b, .w, .l] source target count cp.l 80000000 80000100 10 使用.l 格式将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节)
cmp 比较命令,用于比较两段内存的数据是否相等 cmp [.b, .w, .l] addr1 addr2 count cmp.l 80000000 80000100 10 使用.l 格式来比较 0x80000000 和 0X80000100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节)

说明1:
命令中的[.b .w .l]对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值。address 就是要查看的内存起始地址,[# of objects]表示要查看的数据长度,这个数据长度单位不是字节,而是跟你所选择的显示格式有关。比如你设置要查看的内存长度为20(十六进制为 0x14),如果显示格式为.b 的话那就表示 20 个字节;如果显示格式为.w 的话就表示 20 个 word,也就是 202=40 个字节;如果显示格式为.l 的话就表示 20 个 long,也就是204=80 个字节。另外要注意:
uboot 命令中的数字都是十六进制的!不是十进制的!

说明2:
输入上述命令以后如图 30.4.3.2 所示:
在这里插入图片描述
图 30.4.3.2 nm 命令
在图 30.4.3.2 中,80000000 表示现在要修改的内存地址,ffffff00 表示地址 0x80000000 现在的数据,?后面就可以输入要修改后的数据 0x12345678,输入完成以后按下回车,然后再输入‘q’即可退出,如图 30.4.3.3 所示:
在这里插入图片描述
图 30.4.3.3 修改内存数据
修改完成以后在使用命令 md 来查看一下有没有修改成功,如图 30.4.3.4 所示:
图 30.4.3.4 查看修改后的值
在这里插入图片描述
从图 30.4.3.4 可以看出,此时地址 0X80000000 的值变为了 0x12345678。

S5:U-Boot基本命令第3讲:网络操作命令

要使用网络首先要配置一些环境变量:

环境变量 描述
ipaddr 开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址。
ethaddr 开发板的 MAC 地址,一定要设置。
gatewayip 网关地址。
netmask 子网掩码。
serverip 服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。

例如:

setenv ipaddr 192.168.1.50 
setenv ethaddr 00:04:9f:04:d2:35 
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250 
saveenv

注意:
网络地址环境变量的设置要根据自己的实际情况,确保 Ubuntu 主机和开发板的 IP 地址在同一个网段内。

比如我现在的开发板和电脑都在 192.168.1.0 这个网段内,所以设置开发板的 IP 地址为 192.168.1.50,我的 Ubuntu 主机的地址为 192.168.1.250,因此 serverip 就是192.168.1.250。

ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的 ethaddr 是不同的,否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。

命令 用途 格式 举例 说明
ping 是否可以与指定ip进行通信 ping ip ping 192.168.1.250 注意!只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
dhcp 用于从路由器获取 IP 地址 dhcp dhcp 直接输入 dhcp 命令即可通过路由器获取到 IP 地址
nfs 通过 nfs 可以在计算机之间通过网络来分享资源 nfs [loadAddress] [[hostIPaddr:]bootfilename] nfs 80800000 192.168.1.250:/home/zuozhongkai/linux/nfs/zImage 使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处 (ubuntu系统上要建立并开启nfs服务)
tftp 通过网络下载东西到 DRAM 中 tftpboot [loadAddress] [[hostIPaddr:]bootfilename] tftp 80800000 zImage 将 tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处 (ubuntu系统上要建立并开启tftp服务)

注意点1:
nfs 命令的区别在于,tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。

注意点2:
在这里插入图片描述
在图 中可以看到“TFTP error: ‘Permission denied’ (0)”这样的错误提示,提示没有权限,出现这个错误一般有两个原因:
①、在 Ubuntu 中创建 tftpboot 目录的时候没有给予 tftboot 相应的权限。
②、tftpboot 目录中要下载的文件没有给予相应的权限。
针对上述两个问题,使用命令“chmod 777 xxx”来给予权限,其中“xxx”就是要给予权限的文件或文件夹。

S6:U-Boot基本命令第4讲:FAT操作命令

S7:U-Boot基本命令第5讲:boot相关操作命令

S8:ubuntu下交叉编译工具与传输环境搭建

安装VScode
VScode其实在linux下可以直接运行,不需要安装
我们要做的是给文件夹找一个合适的位置,然后把开始菜单和桌面的程序图标加进去

第一步:下载VScode
在Visual Studio Code官网下载:
VScode linux 64位

第二步:解压缩文件

tar -xvzf code-stable-1536736541.tar.gz

第三步:移动到/usr/local/ 目录,给可执行的权限, 然后就已经可以运行了

mv VSCode-linux-x64 /usr/local/
chmod +x /usr/local/VSCode-linux-x64/code

第四步:添加到开始菜单和桌面
复制一个VScode图标文件到 /usr/share/icons/ 目录(后面会有用),并且编辑VSCode.desktop

cp /usr/local/VSCode-linux-x64/resources/app/resources/linux/code.png /usr/share/icons/
vim /usr/share/applications/VSCode.desktop

然后这样写:

[Desktop Entry]
Name=Visual Studio Code
Comment=Multi-platform code editor for Linux
Exec=/usr/local/VSCode-linux-x64/code
Icon=/usr/share/icons/code.png
Type=Application
StartupNotify=true
Categories=TextEditor;Development;Utility;
MimeType=text/plain;

保存退出,在开始菜单里面应该就看到VScode了。
如果想要桌面上也存在,就这样:

cp /usr/share/applications/VSCode.desktop ~/桌面位置

安装交叉编译器

通常编译工具链对编译环境有较高的要求,编译复杂的程序时,可能需要巨大的存储空间以及强大的 CPU 运算能力加快编译速度。常见的ARM 架构平台资源有限,无论是存储空间还是 CPU 运算能力,都与 PC 相去甚远,特别是对于 MCU 平台,安装编译器根本无从谈起。有了交叉编译,我们就可以在 PC 上快速编译出针对其他架构的可执行程序。

安装过程非常简单,apt安装即可:

sudo apt install gcc-arm-linux-gnueabihf

安装NFS server和挂载NFS目录

第零步:ubuntu和板子处于一个路由器内,并相互ping成功

第一步:虚拟机设置,实体机请跳过:

网络连接选择桥接并勾选复制物理网络连接状态:
在这里插入图片描述
笔记本中经常会有两个或者两个以上的网卡,根据需要进行如下设置:
在这里插入图片描述
再点击管理员模式:
在这里插入图片描述
在里面选择直通(近似可以这样理解)的网卡即可。

总之,大家的电脑和虚拟机不同,不管如何折腾或者怎么连接,目的就是虚拟机和板子之间可以互相Ping成功
ubuntu ping 板子:
在这里插入图片描述

板子ping ubuntu :
在这里插入图片描述

第二步:安装NFS server和挂载NFS目录

apt安装即可:

sudo apt-get install nfs-kernel-server

查看id:

id

记下uid(用户id) 和gid(组id),接下来要用。

安装 NFS 服务后,会新增一个/etc/exports 文件(即/etc 目录下名字为 exports 的文件),
NFS 服务根据它的配置来运行。
这里我们直接使用shell命令修改一下:

sudo echo "/home/pibot/nfs  *(rw,sync,all_squash,anonuid=????,anongid=????,no_subtree_check)" > /etc/exports
sudo exportfs -arv

别忘了把uid和gid填入问号里面去

这里面的*代表所有ip均可以访问,当然也可以指定ip,把它换成:ip/24即可
把/home/pibot/nfs换成你想要挂上去的文件夹

板子设置:

mkdir /home/root/mountnfs
mount -o vers=4 192.168.0.128:/home/pibot/nfs /home/root/mountnfs


执行过去了,就基本正常了,再去挂载目录下看

在这里插入图片描述
文件过来了,搞定!

2010-07-23 16:26:00 wfing 阅读数 9247
原文链接:http://bbs.eetop.cn/thread-224249-1-1.html

创建虚拟的U-bootARM Linux学习环境

作者:YF-YF
日期:2009-12-9
关键词:U-boot,VersatilePB, ARM, Linux, Qemu, PB926RealView Platforms

本文介绍了一种不需要花钱购买真实的电路板,就可以学习基于ARM嵌入式linux技术,基于U-bootbootloader技术的方法。
构成运行嵌入式linux的三个基本构件是:启动管理器,linux内核,根文件系统。这三个部分预先会烧录到电路板上的flash里面。
具体方法是使用Qemu虚拟出ARM公司的Versatile Platform Baseboard。将编译制作好的bootloader, linux-kernel, root-filesystem三个文件制作成flash.img镜像文件。使用qemu-system-arm –Mversatilepb –pflash flash.img进行仿真
本方法中使用的各种工具和代码均可以从ARM官方网站和其他网站下载到。

运行平台:RedhatLinux

第一步:下载需要的工具和软件包
1、
交叉编译环境 Sourcery G++ Lite 2009q3-67 for ARM GNU/Linux
参见网页http://www.codesourcery.com/sgpp/lite/arm/portal/release1039
CodeSourcery
>
Sourcery G++
>
Lite Edition
>
ARM

http://www.codesourcery.com/sgpp/lite/arm/portal/package5383/public/arm-none-linux-gnueabi/arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2



2、
Qemu仿真器
使用的版本是0.10.6,我下载了qemu-0.11.1.tar.gz,发现在我系统上编译不过。
http://download.savannah.gnu.org/releases/qemu/qemu-0.10.6.tar.gz

3、
需要从 www.linux-arm.org下载的工具

参考http://www.arm.com/products/os/linux_download.html里面的说明
1)下载一个制作好的根文件系统armv5t_min.cramfs
http://www.linux-arm.org/git?p=ael.git;a=blob_plain;f=filesystem/bin/armv5t_min.cramfs;hb=2009q1
2)去http://www.linux-arm.org/git
下载修改好的linux-2.6的源码
git clonegit://linux-arm.org/linux-2.6-stable.git

如果系统里没有git工具,可以从 http://kernel.org/pub/software/scm/git/git-1.6.5.5.tar.bz2下载。
3)下载修改好的u-boot源码包

http://www.linux-arm.org/git?p=ael.git;a=blob_plain;f=u-boot/src/u-boot-armdev.git-49103cb62047a20ebd91ed200ae624a7c922e5be.tar;hb=2009q1




第二步:安装编译
Linux系统下,以源码包形式发布的工具,基本安装方法是三步:
a)配置安装目录
./configure --prefix=path_to_install_dir
b)编译代码 make
c)安装到prefix指定的目录中
安装完毕后需要在你的home目录里修改.bashrc.tcshrc,将工具可执行文件的路径添加进去。
1)安装Sourcery G++ Lite 2009q3-67 for ARM GNU/Linux
2)安装Qemu 0.10.6

目前的Qemu并不支持直接从flash启动仿真,网络上有人做了修改,参见http://thomas.enix.org/Blog-20081002153859-TechnologieUsing U-Boot and Flash emulation in Qemu

http://thomas.enix.org/pub/qemu-versatile-flash-emulation/versatilepb-add-flash-support
versatilepb-add-flash-support下载下来。

解压qemu-0.10.6.tar.gz后,使用

%cat versatilepb-add-flash-support|patch –p1
修改hw/versatilepb.c,添加flash支持。
该网站说的其他修改hw/pflash_cfi01.cpatch可以忽略,因为相应代码已经修改过了。

3)编译linux内核
4)编译u-boot.bin

注意修改Makefile里的cross_compile变量为arm-none-linux-gnueabi-,和现在其他通用的前缀“arm-linux-”不一样。
第三步:制作flash.img并运行仿真

%dd if=/dev/zero of=./flash.img bs=256kcount=256
%dd if=u-boot.bin of=./flash.img bs=256kconv=notrunc
%dd if=uImage of=./flash.img bs=256k seek=2conv=notrunc
%dd if=armv5t_min.cramfs of=./flash.imgbs=256K seek=8 conv=notrunc
%qemu-system-arm -M versatilepb -m 200-nographic -pflash ./flash.img
set bootargsroot=/dev/mtdblock0 mtdparts=armflash.0:11868k@0x00200000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
cp 0x340800000x7fc0 0x00200000
bootm

运行成功输出的log文件:
U-Boot 2009.03-rc1 (Dec 02 2009 - 00:57:01)



Code cloned from branch 090204_armdev ofgit://linux-arm.org/u-boot-armdev.git


Release AEL-3.0
Remote commit cloned
UNKNOWN
Latest commit locally
UNKNOWN
git state UNKNOWN
DRAM:
0 kB
pflash_write: Unimplemented flash cmdsequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf0)
pflash_write: Unimplemented flash cmdsequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0x90)
Flash: 64 MB
*** Warning - bad CRC, using defaultenvironment

In:
serial
Out:
serial
Err:
serial
Hit any key to stop autoboot:
0
Wrong Image Format for bootm command
ERROR: can't get kernel image!
VersatilePB # printenv
bootargs=root=/dev/mtdblock0mtdparts=armflash.0:7268k@0x02680000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video =vc:1-2clcdfb:
bootcmd=cp 0x36000000 0x7fc0 0x00200000 ;bootm
bootdelay=2
baudrate=38400
bootfile="/tftpboot/uImage"
stdin=serial
stdout=serial
stderr=serial
verify=n

Environment size: 280/8188 bytes
VersatilePB # ?
?
- alias for 'help'
autoscr - run script from memory
base
- print or set address offset
bdinfo
- print Board Info structure
bootm
- boot application image from memory
bootp
- boot image via network using BOOTP/TFTP protocol
cmp
- memory compare
cp
- memory copy
crc32
- checksum calculation
dhcp
- boot image via network using DHCP/TFTP protocol
erase
- erase FLASH memory
flinfo
- print FLASH memory information
go
- start application at address 'addr'
help
- print online help
iminfo
- print header information for application image
loop
- infinite loop on address range
md
- memory display
mm
- memory modify (auto-incrementing)
mtest
- simple RAM test
mw
- memory write (fill)
nm
- memory modify (constant address)
ping
- send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH writeprotection
rarpboot- boot image via network usingRARP/TFTP protocol
reset
- Perform RESET of the CPU
saveenv - save environment variables topersistent storage
setenv
- set environment variables
tftpboot- boot image via network using TFTPprotocol
version - print monitor version
VersatilePB # set bootargsroot=/dev/mtdblock0 mtdparts=armflash.0:11868k@0x00200000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
VersatilePB # printenv
bootcmd=cp 0x36000000 0x7fc0 0x00200000 ;bootm
bootdelay=2
baudrate=38400
bootfile="/tftpboot/uImage"
stdin=serial
stdout=serial
stderr=serial
verify=n
bootargs=root=/dev/mtdblock0mtdparts=armflash.0:11868k@0x00200000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video=vc:1-2clcdfb:

Environment size: 281/8188 bytes
VersatilePB # cp 0x34080000 0x7fc00x00200000
VersatilePB # bootm
## Booting kernel from Legacy Image at00007fc0 ...

Image Name:
Linux-2.6.28-arm2

Image Type:
ARM Linux KernelImage (uncompressed)

Data Size:
1523620 Bytes =
1.5 MB

Load Address: 00008000

Entry Point:
00008000

Loading Kernel Image ... OK
OK

Starting kernel ...

UncompressingLinux...............................................................................................done, booting the kernel.
Linux version 2.6.28-arm2() (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) #1 Mon Nov30 01:59:09 PST 2009
CPU: ARM926EJ-S [41069265] revision 5(ARMv5TEJ), cr=00093177
CPU: VIVT data cache, VIVT instructioncache
Machine: ARM-Versatile PB
Memory policy: ECC disabled, Data cachewriteback
Built 1 zonelists in Zone order, mobilitygrouping on.
Total pages: 32512
Kernel command line: root=/dev/mtdblock0mtdparts=armflash.0:11868k@0x00200000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
PID hash table entries: 512 (order: 9, 2048bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384(order: 4, 65536 bytes)
Inode-cache hash table entries: 8192(order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 126704KB available (2656K code,217K data, 100K init)
SLUB: Genslabs=12, HWalign=32, Order=0-3,MinObjects=0, CPUs=1, Nodes=1
Calibrating delay loop... 498.07 BogoMIPS(lpj=2490368)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 288 bytes
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024(order: 0, 4096 bytes)
TCP established hash table entries: 4096(order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order:2, 16384 bytes)
TCP: Hash tables configured (established4096 bind 4096)
TCP renoregistered
NET: Registered protocol family 1
JFFS2 version 2.2. (NAND) © 2001-2006 RedHat, Inc.
msgmni has been set to 247
io scheduler noop registered
io scheduler anticipatory registered(default)
io scheduler deadline registered
io scheduler cfq registered
CLCD: unknown LCD panel ID 0x00001000,using VGA
CLCD: Versatile hardware, VGA display
Clock CLCDCLK: setting VCO reg params: S=1R=99 V=98
Console: switching to colour frame bufferdevice 80x30
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 12) is a AMBA/PL011
console [ttyAMA0] enabled
dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 13) is a AMBA/PL011
dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 14) is a AMBA/PL011
fpga:09: ttyAMA3 at MMIO 0x10009000 (irq =38) is a AMBA/PL011
smc91x.c: v1.1, sep 22 2004 by NicolasPitre <nico@cam.org>
eth0: SMC91C11xFD (rev 1) at c88da000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
pflash_write: Unimplemented flash cmdsequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf000f0)
armflash.0: Found 1 x32 devices at 0x0 in 32-bit bank

Intel/Sharp Extended Query Table at 0x0031
pflash_write: Unimplemented flash cmdsequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf0)
Using buffer write method
1 cmdlinepart partitions found on MTDdevice armflash.0
Creating 1 MTD partitions on"armflash.0":
0x00200000-0x00d97000 : "cramfs"
mtd: partition "cramfs" doesn'tend on an erase block -- force read-only
mice: PS/2 mouse device common for all mice
rtc-ds1307: probe of 0-0068 failed witherror -5
i2c/dev entries driver
input: AT Raw Set 2 keyboard as/devices/fpga:06/serio0/input/input0
mmc0: MMCI rev 0 cfg 00 at0x0000000010005000 irq 22,33
Advanced Linux Sound Architecture DriverVersion 1.0.18rc3.
ALSA device list:

Nosoundcards found.
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
VFP support v0.3: implementor 41architecture 1 part 10 variant 9 rev 0
drivers/rtc/hctosys.c: unable to open rtcdevice (rtc0)
input: ImExPS/2 Generic Explorer Mouse as/devices/fpga:07/serio1/input/input1
eth0: link up
Sending DHCP requests ., OK
IP-Config: Got DHCP answer from 10.0.2.2,my address is 10.0.2.15
IP-Config: Complete:

device=eth0, addr=10.0.2.15,mask=255.255.255.0, gw=10.0.2.2,

host=10.0.2.15, domain=,nis-domain=(none),

bootserver=10.0.2.2,rootserver=10.0.2.2, rootpath=
VFS: Mounted root (cramfs filesystem)readonly.
Freeing init memory: 100K
init started: BusyBox v1.14.3(2009-11-12 11:03:55 GMT)
starting pid 324, tty '':'/etc/rc.d/rc.local'
/etc/rc.d/rc.local: line 14: can't create/var/testfile: Read-only file system
warning: can't open /etc/mtab: No such fileor directory
Thu Jan
1 00:00:14 UTC 1970
S: devpts
Thu Jan
1 00:00:14 UTC 1970
S: udev
Thu Jan
1 00:00:17 UTC 1970
S: sshd
Thu Jan
1 00:00:18 UTC 1970
S: dbus id
Thu Jan
1 00:00:19 UTC 1970
S: hald
Thu Jan
1 00:00:19 UTC 1970
S: Xorg
Thu Jan
1 00:00:19 UTC 1970
R: Xorg
Thu Jan
1 00:00:19 UTC 1970
S: dhcdbd
Found no /etc/resolv.conf you need one fore.g. browser to resolve URLs
Thu Jan
1 00:00:19 UTC 1970
S: ohmd
736
/proc/asound/cards file present
No ARM AC'97 Interface found
starting pid 741, tty '': '/sbin/getty -LttySA0 38400 vt100'


AEL login: root
login[742]: root login on 'ttyAMA0'


BusyBox v1.14.3(2009-11-12 11:03:55 GMT) built-in shell (ash)
Enter 'help' for a list of built-incommands.

# help

下面的工作是挂接NFS,就是使用网络文件系统作为根文件系统启动。

(2)使用NFS作根文件系统

需要做几件事情:1)建立Qemu TUN/TAP 虚拟网络
                2)建立 /设置/启动 NFS服务
                3)修改u-boot启动参数,使内核从NFS启动
一、检查运行环境
1)安装必要软件包:使用
#rpm –qa|grep portmap
#rpm –qa|grep nfs
检查是否安装nfs软件包

For the TUN/TAP you need to check your kernel config file for CONFIG_TUN=m or CONFIG_TUN=y.

# grep CONFIG_TUN= /boot/config-`uname -r`

2)从http://sourceforge.net/projects/tunctl/ 下载 The tunctl tool for controlling the TUN/TAP driver in Linux. http://sourceforge.net/projects/ ... 1.5.tar.gz/download  

这个用来创建Qemu需要tap网络

如果系统内没有tun网络支持,可以下载
http://vtun.sourceforge.net/tun/tun-1.1.tar.gz
检查方法:查看是否存在 #ls /dev/net/tun
如果支持,没有,可以执行
#mknod /dev/net/tun c 10 200 创建

关于TUN/TAP的说明:
Virtual network
In computer networking, TUN and TAP are virtual network kernel drivers. They implement network devices that are supported entirely in software, which is different from ordinary network devices that are backed up by hardware network adapters.
TAP (as in network tap) simulates an Ethernet device and it operates with layer 2 packets such as Ethernet frames. TUN (as in network TUNnel) simulates a network layer device and it operates with layer 3 packets such as IP packets. TAP is used to create a network bridge, while TUN is used with routing.

Make sure that "Kernel module loader" - module auto-loading support is enabled in your kernel.

Add following line to the /etc/modules.conf: 在2.6里面为 /etc/modprobe.conf
alias char-major-10-200 tun
Run:
/sbin/depmod -a
Driver will be automatically loaded when application access /dev/net/tun.

Modprobe是管理模块添加删除的命令


3)关闭redhat的firewall,或者通过system settings/security level 里把tap0加入到trusted devices, SElinux/support NFS

二、设置TAP网络
解压安装tunctl-1.5.tar.gz:
#tar zxf tunctl-1.5.tar.gz
#make
#cp tunctl /sbin/

创建虚拟网络:
#/sbin/tunctl –t tap0 –u root
#/sbin/ifconfig tap0 10.0.2.1

To delete the interface, use the -d option:
# tunctl -d tap0

编辑/etc/qemu-ifup 文件为:
#!/bin/sh
/sbin/ifconfig $1 10.0.2.1
这个作为Qemu启动时的网络设置脚本,和单独执行ifconfig tap0 10.0.2.1效果是一样的

也可以编辑/etc/qemu-ifdown为;
#!/bin/sh
/sbin/ifdown tap0
在Qemu关闭时,关闭tap网络

三、设置NFS
使用system settings/server settings/NFS 设置要共享的目录 /soft/nfs_share , hosts 设为*,RW,允许root身份

通过 #/sbin/service nfs restart/status/start/stop 启动NFS服务

把根文件系统文件复制到NFS共享目录里:
#mount -o loop -t cramfs armv5_min.cramfs /mnt/cram
#cp –r /mnt/cram/* /soft/nfs_share

检查NFS是否工作正常:
#mount -t nfs 10.0.2.1:/soft/nfs_share /mnt

也可以直接修改/etc/exports:

/system/directory     192.168.7.2(rw,no_root_squash,async)

在exports文件 客户端,客户端主机的指定非常灵活,如下所示
客户端主机地址                                 说明
192.168.0.28                            指定ip地址的主机
www.chinafu.net                         指定域名的主机
192.168.0.10/31                        指定网段中的所有主机
*.chinafu.com                           指定域中的所有主机
*                                      指定所有主机
  sync                        设置NFS服务器同步写磁盘,这样不会轻易丢失数据,NFS服务器建议使用该选项
  ro                            设置输出的共享目录只读,与 rw捡能同时使用
  rw                            设置输出的共享目录可读写 ,与ro不能共同使用
为了使NFS服务器能正常工作,需要启动portmap和nfs两人服务,并且portmap一定要先于nfs启动


四、修改Qemu启动命令

qemu-system-arm -M versatilepb -m 200 -nographic -pflash ./flash.img -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

关于启动参数的说明:
The "-nographic" option boots qemu in the terminal. Leaving this option off causes qemu to boot using its separate graphical window. Hit <3> to toggle to the console. <2> gets to back to the qemu control panel, where a "quit" will exit qemu. <1> gives the graphics (LCD) console (which doesn't seem to work for integrator kernels, but will give a small 320×240 framebuffer screen for versatile kernels with ARM LCD enabled). Just will free up the mouse. The graphic option is nice in that the console is in color.

With the "-m" option you can tell the system how much memory it should have; 128 MB is the default.

I run qemu as root to avoid complications, e.g., a normal user doesn't have access to the "tap0" device, apparently. The emulated system boots with the serial port /dev/ttyAMA0 as the system console.

# ./run_qemu

VersatilePB # set ipaddr 10.0.2.2
VersatilePB # set serverip 10.0.2.1
VersatilePB # set bootargs root=/dev/nfs nfsroot=10.0.2.1:/soft/nfs_share ip=10.0.2.2 mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
VersatilePB # cp 0x34080000 0x7fc0 0x00200000
VersatilePB # bootm


对于参数ip的解析具体由kernel中__setup("ip=", ip_auto_config_setup);函数完成
对于参数ip的说明见Documentation/filesystems/nfsroot.txt
ip=::::::

成功运行的log文件;
# cat /etc/qemu-ifup
#!/bin/sh
/sbin/ifconfig $1 10.0.2.1
# ./run_qemu


U-Boot 2009.03-rc1 (Dec 02 2009 - 00:57:01)



Code cloned from branch 090204_armdev of git://linux-arm.org/u-boot-armdev.git


Release AEL-3.0
Remote commit cloned   UNKNOWN
Latest commit locally  UNKNOWN
git state UNKNOWN
DRAM:   0 kB
pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf0)
pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0x90)
Flash: 64 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
VersatilePB # printenv
bootargs=root=/dev/mtdblock0 mtdparts=armflash.0:7268k@0x02680000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
bootcmd=cp 0x36000000 0x7fc0 0x00200000 ; bootm
bootdelay=2
baudrate=38400
bootfile="/tftpboot/uImage"
stdin=serial
stdout=serial
stderr=serial
verify=n

Environment size: 280/8188 bytes
VersatilePB # set ipaddr 10.0.2.2
VersatilePB # set serverip 10.0.2.1
VersatilePB # set bootargs root=/dev/nfs nfsroot=10.0.2.1:/soft/nfs_share ip=10.0.2.2 mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
VersatilePB # cp 0x34080000 0x7fc0 0x00200000
VersatilePB # bootm
## Booting kernel from Legacy Image at 00007fc0 ...
   Image Name:   Linux-2.6.28-arm2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1523620 Bytes =  1.5 MB
   Load Address: 00008000
   Entry Point:  00008000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux............................................................................................... done, booting t he kernel.
Linux version 2.6.28-arm2 () (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) #1 Mon Nov 30 01:59:09 PST 2009
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00093177
CPU: VIVT data cache, VIVT instruction cache
Machine: ARM-Versatile PB
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
Kernel command line: root=/dev/nfs nfsroot=10.0.2.1:/soft/nfs_share ip=10.0.2.2 mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 126704KB available (2656K code, 217K data, 100K init)
SLUB: Genslabs=12, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Calibrating delay loop... 418.61 BogoMIPS (lpj=2093056)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 288 bytes
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 247
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
CLCD: unknown LCD panel ID 0x00001000, using VGA
CLCD: Versatile hardware, VGA display
Clock CLCDCLK: setting VCO reg params: S=1 R=99 V=98
Console: switching to colour frame buffer device 80x30
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 12) is a AMBA/PL011
console [ttyAMA0] enabled
dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 13) is a AMBA/PL011
dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 14) is a AMBA/PL011
fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 38) is a AMBA/PL011
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@cam.org>
eth0: SMC91C11xFD (rev 1) at c88da000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf000f0)
armflash.0: Found 1 x32 devices at 0x0 in 32-bit bank
Intel/Sharp Extended Query Table at 0x0031
pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf0)
Using buffer write method
RedBoot partition parsing not available
afs partition parsing not available
mice: PS/2 mouse device common for all mice
rtc-ds1307: probe of 0-0068 failed with error -5
i2c /dev entries driver
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
mmc0: MMCI rev 0 cfg 00 at 0x0000000010005000 irq 22,33
Advanced Linux Sound Architecture Driver Version 1.0.18rc3.
ALSA device list:
  No soundcards found.
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
eth0: link up
IP-Config: Guessing netmask 255.0.0.0
IP-Config: Complete:
     device=eth0, addr=10.0.2.2, mask=255.0.0.0, gw=255.255.255.255,
     host=10.0.2.2, domain=, nis-domain=(none),
     bootserver=255.255.255.255, rootserver=10.0.2.1, rootpath=
Looking up port of RPC 100003/2 on 10.0.2.1
Looking up port of RPC 100005/1 on 10.0.2.1
VFS: Mounted root (nfs filesystem).
Freeing init memory: 100K
init started: BusyBox v1.14.3 (2009-11-12 11:03:55 GMT)
starting pid 325, tty '': '/etc/rc.d/rc.local'
warning: can't open /etc/mtab: No such file or directory
mount: mount point /proc does not exist
mount: mount point /sys does not exist
mount: mount point /tmp does not exist
Thu Jan  1 00:00:23 UTC 1970
S: devpts
Thu Jan  1 00:00:23 UTC 1970
S: udev
Thu Jan  1 00:00:24 UTC 1970
S: sshd
PRNG is not seeded
Thu Jan  1 00:00:28 UTC 1970
S: dbus id
Thu Jan  1 00:00:28 UTC 1970
S: hald
Thu Jan  1 00:00:29 UTC 1970
S: Xorg
Thu Jan  1 00:00:29 UTC 1970
R: Xorg
Thu Jan  1 00:00:29 UTC 1970
S: dhcdbd
Found no /etc/resolv.conf you need one for e.g. browser to resolve URLs
Thu Jan  1 00:00:29 UTC 1970
S: ohmd
359
No /proc/asound/cards file present
starting pid 363, tty '': '/sbin/getty -L ttySA0 38400 vt100'

AEL login: root
login: can't chdir to home directory '/root'


BusyBox v1.14.3 (2009-11-12 11:03:55 GMT) built-in shell (ash)
Enter 'help' for a list of built-in commands.

# ls

3、使用TFTP下载linux内核镜像uImageSDRAM,根文件系统还是采用NFS

前面的方法都是从Flash复制内核镜像文件到SDRAM

步骤:设置TFTP服务

u-boot里设置tftp ip 地址,并复制镜像文件

使用bootm启动
1) tftp服务器的配置
如果用下面一条命令能够看到服务已经启动, 则不用安装, 否则需要按12点安装tftp-server服务器.
#netstat -a | grep tftp
udp 0 0 *:tftp *:*
1. RPM包安装tftp-server
#cp tftp-server-0.32-4.i386.rpm/home/arm/dev_home/btools/
#su root
#rpm -q tftp-server
如果没有安装tftp-server,就要用下面命令安装,否则,直接进入第2步配置服务.
#cd /home/arm/dev_home/btools/
#rpm -ivh tftp-server-0.32-4.i386.rpm

建立tftp的主工作目录
#mkdir /soft/tftpboot
#cp uImage /soft/tftpboot
2. 修改配置文件并启动服务
备份配置文件
#cp /etc/xinetd.d/tftp/etc/xinetd.d/tftp.old
修改配置文件
#vi /etc/xinetd.d/tftp
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /soft/tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}
检查tftp服务是否打开
#chkconfig --list
如果tftp的服务没有打开,则用下面命令打开tftp服务开关
#chkconfig tftp on
重启服务
#/etc/init.d/xinetd restart
#netstat -a | grep tftp
udp 0 0 *:tftp *:*

2) u-boot里设置tftp

VersatilePB # setipaddr 10.0.2.2
VersatilePB # setserverip 10.0.2.1
VersatilePB # printenv
bootargs=root=/dev/mtdblock0mtdparts=armflash.0:7268k@0x02680000(cramfs) ip=dhcp mem=128M console=ttyAMA0 video=vc:1-2clcdfb:
bootcmd=cp 0x36000000 0x7fc0 0x00200000 ;bootm
bootdelay=2
baudrate=38400
bootfile="/tftpboot/uImage"
stdin=serial
stdout=serial
stderr=serial
verify=n
ipaddr=10.0.2.2
serverip=10.0.2.1

Environment size: 314/8188 bytes
VersatilePB # tftp0x7fc0 uImage
SMC91111: PHY auto-negotiate timed out
Using MAC Address 52:54:00:12:34:56
TFTP from server 10.0.2.1;our IP address is 10.0.2.2
Filename 'uImage'.
Load address: 0x7fc0
Loading:#################################################################

#######################################
done
Bytes transferred = 1523684 (173fe4 hex)
VersatilePB # setenvbootargs root=/dev/nfs nfsroot=10.0.2.1:/soft/nfs_shareip=10.0.2.2 mem=128Mconsole=ttyAMA0 video=vc:1-2clcdfb:
VersatilePB # printenv
bootcmd=cp 0x36000000 0x7fc0 0x00200000 ;bootm
bootdelay=2
baudrate=38400
bootfile="/tftpboot/uImage"
stdin=serial
stdout=serial
stderr=serial
verify=n
ethaddr=52:54:00:12:34:56
filesize=173FE4
fileaddr=7FC0
ipaddr=10.0.2.2
serverip=10.0.2.1
bootargs=root=/dev/nfs nfsroot=10.0.2.1:/soft/nfs_shareip=10.0.2.2 mem=128Mconsole=ttyAMA0 video=vc:1-2clcdfb:

Environment size: 356/8188 bytes
VersatilePB # bootm

2013-04-27 09:29:43 wyc09 阅读数 547

ARM Linux特指运行于ARM架构处理器平台的Linux,区别于运行于PC上的X86 Linux。

ARM架构处理器多用在嵌入式系统中,通常被集成到片上系统(SoC)。由于片上系统整合外部设备控制器的多样性,对于任何一片特定的片上系统,需要对ARM Linux进行定制,以使集成在片上系统中的各项功能可用,这个过程称为ARM Linux移植。

ARM Linux移植的主要工作:1)Bootloader移植;2)ARM Linux内核移植;3)根文件系统制作。完成这三项基本工作之后,就可以在运行于片上系统之上的ARM Linux基础上开发针对特定需求的应用,包括推迟到开发阶段的驱动程序、应用程序等。 

1)Bootloader移植。

ARM Linux内核被设计为尽可能平台无关,而Bootloader则负责提供板级支持包(BSP)的功能,在为ARM Linux内核提供基本的运行环境之后,如CPU可用、内存可用,便可加载ARM Linux内核,并将系统控制权完全交给ARM Linux内核。这个过程称为引导ARM Linux内核。一般来讲,Bootloader是特定于硬件平台的,但是由于某些开源Bootloader,如UBOOT的存在,使得开发人员可以对既有Bootloader进行尽可能少量的修改,便可将其用来在特定目标板上引导ARM Linux内核。

UBOOT引导ARM Linux内核的一般流程:初始化CPU环境,如关中断、设定运行模式 --> 初始化DRAM控制器,以使内存可用 --> 如有必要,初始化串口用于输出引导信息,初始化网口用于下载ARM Linux内核镜像 --> 加载ARM Linux内核镜像 --> 为ARM Linux内核准备参数,将控制流转到ARM Linux内核入口。

2)ARM Linux内核移植。

ARM Linux内核接受Bootloader的引导参数,如DRAM大小和起始地址、用作Console的设备的名称、根文件系统的位置。为了使ARM Linux内核能够正常使用片上系统芯片内部及目标板上的各种功能,在这个过程中需要在ARM Linux内核代码中加入平台特定的一些代码,通常将这些代码存放在arch/arm目录下的某个机器特定的目录中。ARM Linux内核中已经包含了大量平台特定的代码,但相比平台的多样性,这些代码还是不够的。 在编译生成ARM Linux内核镜像之前,需要对ARM Linux内核进行必要的配置,使在内核代码中实现的某项功能被加入或不加入ARM Linux内核,如加入对mini2440目标板和smdk2440目标板的支持、加入针对三星SoC串口的驱动、不加入FAT文件系统。需要说明一下,ARM Linux内核可以同时支持多种目标板(或称机器类型),但在启动的时候只会根据Bootloader在R1寄存器中指定的机器码来选定一款支持的机器类型,在执行平台无关代码之前进行与选定机器类型平台相关的初始化工作。在平台相关的初始化工作中可以将目标板上的各种功能都初始化,也可什么都不做,而将这些工作推迟到开发阶段来完成。

3)根文件系统制作。

如果ARM Linux内核启动后不需要访问文件系统,就不需要做这项工作。但是大多数情况下,ARM Linux内核在启动后会从文件系统中读取配置文件,并根据配置文件中的内容完成更多的工作,如启动必要的工作进程,使系统进入到指定的工作状态。在ARM Linux内核的启动参数中,initrd指定ARM Linux内核启动后需要执行的程序,ARM Linux内核从指定的根文件系统中加载这个程序并用其创建init进程。init进程做什么工作则是由这个指定的程序来决定的。可能的工作,如启动一个Shell程序或者打开一个图形用户界面。BusyBox提供了一个用于此目的的程序,名称为linuxrc,可以将linuxrc配置为启动一个类似于Linux中的bash的Shell程序,BusyBox同样提供了这个Shell程序。

2017-05-16 13:57:21 MyLinChi 阅读数 492
前段时间做了一个关于ARM9 2440资料的汇总帖,很高兴看到***和CSDN等论坛朋友们的支持和鼓励。当年学单片机的时候datasheet和学习资料基本都是在论坛上找到的,也遇到很多好心的高手朋友,耐心的回答我提出的问题。感激、图报,很简单的想法。希望这次整理的资料帖能对更多的嵌入式爱好者朋友带来帮助! 

PS: 
   在此特别感谢 古道热肠 版主把我的帖子加精,给小弟极大鼓舞! 

嵌入式入门篇: 

什么是嵌入式系统                         http://www.helloarm.com/Embedded-Learn/58.htm 

嵌入式资深工程师白话说“嵌入式”         http://www.helloarm.com/Embedded-Learn/52.htm 

嵌入式系统的学习途径与基本方法(硬件)   http://www.helloarm.com/Embedded-Learn/50.htm 

如何学习嵌入式(软件)                   http://www.helloarm.com/Embedded-Learn/51.htm            

ARM入门学习方法                          http://www.helloarm.com/Embedded-Learn/46.htm 

嵌入式Linux学习步骤                      http://www.helloarm.com/Embedded-Learn/48.htm 

嵌入式学习方法 关于ARM+linux            http://www.helloarm.com/Embedded-Learn/47.htm 

我的嵌入式之路(必看必看!)             http://www.helloarm.com/Embedded-Learn/45.htm 

------------------------------------------------------------------------------------------------- 

ARM学习思路 

什么是ARM                               http://www.helloarm.com/ARM-knowledge/59.htm 

ARM77与ARM9的区别                       http://www.helloarm.com/ARM-knowledge/61.htm 

ARM开发:一 ARM微处理器概述             http://www.helloarm.com/ARM-knowledge/107.htm 

ARM开发:二 ARM微处理器的编程模型       http://www.helloarm.com/ARM-knowledge/106.htm 

ARM开发:三 ARM微处理器的指令系统       http://www.helloarm.com/ARM-knowledge/105.htm 

ARM中C和汇编混合编程及示例              http://www.helloarm.com/ARM-knowledge/62.htm 

ARM 开发软件及实用工具介绍              http://www.helloarm.com/ARM-knowledge/60.htm 

ADS集成开发环境详细介绍                 http://www.helloarm.com/ADS-Learn/113.htm 

ads调试工程的设置                       http://www.helloarm.com/ADS-Learn/112.htm 

---------------------------------------------------------------------------------------------------------- 

嵌入式操作系统学习 

七款嵌入式Linux操作系统简介            http://www.helloarm.com/Linux/193.htm 

使用虚拟机嵌入式Linux开发前的必要准备  http://www.helloarm.com/Linux/183.htm 

Linux启动的简析                        http://www.helloarm.com/Linux/210.htm 

Linux上的C/C++编译器gcc/egcs详解       http://www.helloarm.com/Linux/188.htm 

arm linux 下最小的hello world程序      http://www.helloarm.com/Linux/123.htm 

Linux文件和目录访问权限设置            http://www.helloarm.com/Linux/185.htm 

tar命令的使用                          http://www.helloarm.com/Linux/176.htm 

Linux下各种压缩包的解压方法            http://www.helloarm.com/Linux/177.htm 

linux内核裁剪的具体过程和方法          http://www.helloarm.com/Linux/187.htm 

Linux 系统内核的调试                   http://www.helloarm.com/Linux/219.htm 

基于嵌入式Qt的车载GUI平台的设计        http://www.helloarm.com/Linux/184.htm 

在U-Boot中实现对Yaffs镜像的支持        http://www.helloarm.com/Linux/205.htm 

ARM Linux根文件系统的制作              http://www.helloarm.com/Linux/217.htm 

基于μCLinux的USB芯片FT245BL驱动实现   http://www.helloarm.com/Linux/203.htm 

fcntl函数详解                          http://www.helloarm.com/Linux/199.htm 

BusyBox 简化嵌入式 Linux 系统          http://www.helloarm.com/Linux/218.htm 


--------------------------------------------------------------------------------------------------------------- 

进一步学习Linux 

arm2410的Linux系统移植——vivi、内核、根文件系统的编译    http://www.helloarm.com/Linux/120.htm 

在s3c2410开发板上移植u-boot1.1.4                          http://www.helloarm.com/Linux/127.htm 

NFS for Linux(网络文件系统)                             http://www.helloarm.com/Linux/171.htm 

Linux 下串口编程入门                                      http://www.helloarm.com/Linux/180.htm 

Makefile经典教程                                          http://www.helloarm.com/Linux/166.htm 

linux Shell编程入门 实例讲解详解                          http://www.helloarm.com/Linux/173.htm 

嵌入式Linux下NAND存储系统的设计与实现                     http://www.helloarm.com/Linux/121.htm 

s3c2410/s3c2440的USB HOST不稳定的原因及解决方法           http://www.helloarm.com/Linux/124.htm 

ARM平台上蓝牙协议栈Bluez的移植使用和配置                  http://www.helloarm.com/Linux/122.htm 

Linux液晶屏驱动开发[1]                                    http://www.helloarm.com/Linux/175.htm 

Linux液晶屏驱动开发[2]                                    http://www.helloarm.com/Linux/178.htm 

Linux液晶屏驱动开发[3]                                    http://www.helloarm.com/Linux/179.htm 

------------------------------------------------------------------------------------------------------------------- 

windows CE学习 

WinCE 菜鸟问答                                           http://www.helloarm.com/Wince/111.htm 

Windows CE嵌入式操作系统的优势                           http://www.helloarm.com/Wince/213.htm 

WinCE 编程的十点忠告                                     http://www.helloarm.com/Wince/160.htm 

浅谈WinCE应用程序的可移植性                              http://www.helloarm.com/Wince/78.htm 

详解WinCE的控制面板                                      http://www.helloarm.com/Wince/81.htm 

Windows CE5.0 I/O操作基础(1)                             http://www.helloarm.com/Wince/76.htm 

Windows CE5.0 I/O操作基础(2)                             http://www.helloarm.com/Wince/77.htm  

wince中的BSP工程的pbcxml文件介绍                         http://www.helloarm.com/Wince/190.htm 

WinCE 下用DirectShow播放音频和视频                       http://www.helloarm.com/Wince/137.htm 

Explorer注册表键值归纳                                   http://www.helloarm.com/Wince/110.htm 

WinCE 5.0 virtual memory space                           http://www.helloarm.com/Wince/138.htm 

关于EVC中的预编译头文件.pch                              http://www.helloarm.com/Wince/146.htm 

WinCE下对文件的基本操作                                  http://www.helloarm.com/Wince/72.htm 

WinCE 在CF卡上实现冷启动自动保存注册表                   http://www.helloarm.com/Wince/75.htm 

WinCE 驱动开发学习笔记                                   http://www.helloarm.com/Wince/73.htm 

让程序在WinCE系统启动时自动运行-两种方法                 http://www.helloarm.com/Wince/74.htm 


------------------------------------------------------------------------------------------------------------------------- 

UCOS-II操作系统 

UC/OS和UCLinux比较                                      http://www.helloarm.com/ucos/98.htm 

μC/OS-II的实时性能分析                                 http://www.helloarm.com/ucos/161.htm 

μC/OS-II的多任务系统实时性分析与优先级分配             http://www.helloarm.com/ucos/90.htm 

μC/OS-II下通用驱动框架的设计与实现                     http://www.helloarm.com/ucos/103.htm 

UC/OS II多任务切换例程                                  http://www.helloarm.com/ucos/96.htm 

基于μC/OS-II的时间片调度法设计                         http://www.helloarm.com/ucos/94.htm 

ucos II+ucGUI+s3c2410+LCD+触摸屏整合                    http://www.helloarm.com/ucos/89.htm 

LPC2292的μC/OS-II硬件抽象层构建                        http://www.helloarm.com/ucos/97.htm 

----------------------------------------------------------------------------------------------------------------------------- 

UCOS移植篇 

uC/OS-II实时操作系统在嵌入式平台上进行移植的方法与技巧  http://www.helloarm.com/ucos/86.htm 

基于Nios软核CPU的uC/OS-II和LwIP移植                     http://www.helloarm.com/ucos/85.htm 

μCOS-II在ATmega128单片机上的移植与开发                 http://www.helloarm.com/ucos/104.htm 

μC/OS-II在Cortex-M3系列单片机上的移植                  http://www.helloarm.com/ucos/92.htm 

uC/OS II在S3C2410上的移植                               http://www.helloarm.com/ucos/79.htm 

uCOS II在SkyEye上的移植分析                             http://www.helloarm.com/ucos/68.htm 

------------------------------------------------------------------------------------------------------------------------------ 

经典案例分析 

实时内核μC/OS-II下的网络监控系统的设计                http://www.helloarm.com/ucos/99.htm 

基于uC/OS-II的MP3文件播放系统设计                     http://www.helloarm.com/ucos/82.htm 

基于ARM和μC/OS-II的人造提花毛皮机控制系统            http://www.helloarm.com/ucos/100.htm 

基于uC/OS-II的智能窗系统设计                          http://www.helloarm.com/ucos/83.htm 

uC/OS-II在电能计量电表中的应用研究                     http://www.helloarm.com/ucos/80.htm 



-------------------------------------------------------------------------------------------------------------------------------- 
上次的帖子: 

因为资料较多,先整理这一部分,后续还会完善并相继推出ARM11 6410专区,以便大家学习交流。 

    如果这个帖子对您有帮助,烦请各位顶贴,小弟先谢谢了O(∩_∩)O 

(一)2440专区: 
优秀论坛专区: 
第一:http://www.ourdev.cn/bbs/ 
第二:http://community.csdn.NET
第三:http://***.cn/bbs/ 
第四:http://www.witech.com.cn/bbs/ 
第五:http://www.helloarm.com/ 
转帖专区: 
【转贴】2440使用常见问题解析: http://bbs.witech.com.cn/thread-353-1-1.html 
【转帖】让您爱不释手的专业串口调试软件:http://bbs.witech.com.cn/thread-282-1-1.html 
【转帖】嵌入式入门笔记 :http://bbs.witech.com.cn/thread-272-1-1.html 
【转帖】软硬件协同设计技术:http://bbs.witech.com.cn/thread-315-1-1.html 
【转帖】北大嵌入式开发讲义:http://bbs.witech.com.cn/thread-321-1-1.html 
【转帖】Windows CE开发初步:http://bbs.witech.com.cn/thread-235-1-1.html 
下载专区: 
【PDF下载】飞凌2440开发板技术手册:http://blog.sina.com.cn/s/blog_6536a9450100hq1y.html 
【PDF下载】JLINK用户手册:http://blog.sina.com.cn/s/blog_6536a9450100hq1y.html 
【PDF下载】摄像头芯片DATASHEET: http://blog.sina.com.cn/s/blog_6536a9450100hq1y.html 
【RAR下载】UCOS-II:http://blog.sina.com.cn/s/blog_6536a9450100hq1y.html 
【PPT下载】ARM相关:http://bbs.witech.com.cn/thread-391-1-1.html 
【PPT下载】Linux相关:http://bbs.witech.com.cn/thread-391-1-1.html 
图文专区: 
【源码文章】Bootloader源码: http://blog.sina.com.cn/s/blog_6536a9450100hpw1.html 
【源码文章】2440下的流水灯实验:http://blog.sina.com.cn/s/blog_6536a9450100hpw3.html 
【源码文章】2440下的CAN总线实验:http://blog.sina.com.cn/s/blog_6536a9450100hpw7.html 
【源码文章】2440下的fork实验:http://blog.sina.com.cn/s/blog_6536a9450100hpw7.html 
【源码文章】2440下的IIC实验:http://blog.sina.com.cn/s/blog_6536a9450100hpwb.html 
【源码文章】2440下的看门狗实验:http://blog.sina.com.cn/s/blog_6536a9450100hpwb.html 
【源码文章】2440下的USB实验:http://blog.sina.com.cn/s/blog_6536a9450100hpwf.html 
【源码文章】2440下的触摸屏测试:http://blog.sina.com.cn/s/blog_6536a9450100hq1y.html 
【源码文章】2440下的温度传感器:http://blog.sina.com.cn/s/blog_6536a9450100hpwi.html 
【源码文章】Linux文件系统移植详解:http://blog.sina.com.cn/s/blog_6536a9450100hq1u.html 
【源码文章】Linux内核移植详解1:http://blog.sina.com.cn/s/blog_6536a9450100hisp.html 
                         
            Linux内核移植详解2:http://blog.sina.com.cn/s/blog_6536a9450100hisp.html 

视频专区: 
【在线视频】《嵌入式系统综述》:http://www.tudou.com/programs/view/KL0y2VqgZOs/ 
【在线视频】《嵌入式学习基础》:http://www.tudou.com/programs/view/W6XpvmGZfG4/ 
【在线视频】《嵌入式环境》:http://www.tudou.com/programs/view/W6XpvmGZfG4/ 
【在线视频】《嵌入式BootLoader》:http://www.tudou.com/programs/view/1kY_23UccC0/ 
【在线视频】《嵌入式ARM学习-上》:http://www.tudou.com/programs/view/BWy4tXo4o5A/ 
            《嵌入式ARM学习-下》:http://www.tudou.com/programs/view/dFxXjq8nEm0/ 
【在线视频】《嵌入式ARM精华理论》:http://www.tudou.com/programs/view/dFxXjq8nEm0/
2014-03-18 20:12:10 chunlovenan 阅读数 765

开发板:TQ2440。

使用工具:1.开发板一块;2.天嵌提供的提供的700M资料;3.《嵌入式linux应用开发完全手册》《UNIX环境高级编程》《LINUX设备驱动程序》《深入理解UNIX内核》《unix内核源码情景分析》

 流程:

 

1.先看S3C2440核心板原理图,知道有哪些脚可用

总结:

有ADDRESS,ADC,CLOCK,TIMER,DATA,DMA,chip select,SDRAM,NAND Controller,SDIO,UART,JTAG,LCD,TSP,IIS,IIC,IPS,USB,Camera interface,External interrupt共190多个引脚。

(没有详细看各个引脚的作用,知识初略了解了一下核心板原理图与底板原理图,和每种引脚的大概作用,明白工作方式而已,目的是为下面写裸奔程序与init做铺垫)

 

2.拿着《S3C2440A datasheet》,《嵌入式linux应用开发完全手册》开始仔细看韦东山的书。

总结:

了解ARM体系结构,如GPIO,MMU,NAND flash,intterput,PART,I2T,LCD,ADS,要搭建好环境是需要几天时间,请耐心的搭建,我的一些师兄,就是被搭建环境而拘于门外,我就苦苦搞了1个星期——建立交叉编译器环境

 

3.看uboot源码,明白uboot怎么样引导操作系统滴。

(这一步要一边看韦东山的书,一边看如何源码,偶尔看看视频,交叉着来学)

 

5.改写linux设备驱动程序。此时应该对linux有比较深入的了解啦。或者买个camera,自己写个驱动。(用书《UNIX环境高级编程》《LINUX设备驱动程序》)

 

6.开始研究linux内核(用书2本《深入理解UNIX内核》,《unix内核源码情景分析》)

 (估计完成上面几步就需要半年时间,比我一开始预计的2个月肯定要长,而且半年内需要很努力很认真,即使这样,我还只是是菜鸟,想成为嵌入式高手,肯定有很长的时间积累与开发经验,以《深入理解UNIX内核》为纲,《unix内核源码情景分析》为目,以linux内核源码为本,交叉式/查阅字典式学习)

更多 0

linux+ARM学习路线

阅读数 1501