+ -
当前位置:首页 → 问答吧 → 硬件工程师linux傻瓜入门项目

硬件工程师linux傻瓜入门项目

时间:2006-07-29

来源:互联网

一直对linux感兴趣,买了几本书都没开始,到一家培训中心花了2000元接受了一次感觉不好的培训,就像过去听的产品发布会一样(,就是那种三四天速成的培训,不要发票可以便宜200元)摸索了很长时间后才发现,原来做不通的东西其实很简单,但是国内的人员一做linux就觉得自己是高手,文档写的特简单,多数硬件工程师的英文看芯片文档还可以,转到软件就费力,所以我想开始一个傻瓜入门的项目,帮助和我一样的人走入linux殿堂,
本文作者赵久华,通信方式[email protected] qq群:6149846,希望那些已经走过弯路的人加入进来和我一起帮助那些正在走弯路,和要走弯路的人。
一、linux的选型安装
二、linux基本命令的使用
三、先睹为快,x86下完成一个简单的linux程序
四、利用已有的交叉编译器编译一个linux内核和busybox
五、9200下载linux与使用

七、编写一个led驱动程序
六、制作交叉编译器
写作风格:不使用linux编程的任何技巧,所有的都要自己测试过,书写步骤明确,尽量简单明了。
1、为什么学习linux:
。linux有很多驱动,减少大量的工作量
。linux有很多资源,对手头紧的公司很有吸引力,当然也可以提高硬件工程师的工资
。其他理由,网上很多
2、选择一个合适的linux桌面版本
。在中国流行的linux版本有红旗、红帽子()suse,如果你想专业一些建议选用suse,因为nowell毕竟是老牌的操作系统企业,这个版本功能是很强大的,但是我安装的时候发现他加了很多定制功能,一旦出了错不知道如何处理,如果你喜欢新东西,就选红帽了,而且关于这个操作系统的书也多
。但是如果你是新手,和我一样的,建议选用红旗最终测试版,稍微熟悉一点就选用工作站版,但是要用它的内核升级工具找到最终测试版的内核,否则工作站版不支持ntfs格式的硬盘分区加载
。安装分区策略:由于在linux开发中有大量的小文件存在,所以建议选用reiserfs分区,这种分区速度快,占用空间小,在编译相关程序时比ext3格式快很多。它和ext3的比较各位可以从网上查找,
。  linux分区建议最小留下15G的空间,如果硬盘足够大,40G是比较好的,比内存大些的分区留给交换分区,15G留给系统挂栽到根分区/,剩下的作为安装开发所需要的空间挂载到/home分区,这个分区在你重装系统时不要格式化,这样你就可以尝试几种linux桌面操作系统

3、基本命令的使用
嵌入式开发一定会使用到命令行操作,所以首先要学会linux的基本操作,下面的这些命令是我在学习中经常使用 cd ls mkdir rm cp mv cat/zcat tar vi mount ln find
网络操作命令 ping,ifconfig
1)注意:
。在红旗linux中需要打开系统终端才可以使用命令行操作
。linux文件名不能含有/符号,*匹配零个或多个任意字符,?匹配单个任意字符
。命令选项参数之间要用空格隔开,连续空格等同于单个空格
。命令补齐:要输入的命令路径很深或者文件名很长,可以使用<TAB>键补齐
。红旗linux网站上有个linux操作使用文档,说的更详细一些
2)命令说明:
1》clear 刷新屏幕
2》名称 : cd
说明 : 变换工作目录至 dirName。
方式 : cd [dirName]
参数:"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。
范例 : 跳到 /usr/bin/ :
cd /usr/bin
跳到自己的 home directory :
cd ~
跳到目前目录的上上两层 :
cd ../..

3》名称 : mkdir
说明 : 建立目录
方式:mkdir [选项] 目录名[目录名]
参数:-p 建立子目录
范例:mkdir tools1 tools2  建立tools1 tools2两个目录
  mkdir -p tools/tools1  建议目录tools和下面的子目录tools1
4》名称 : ls
说明 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。使用方式 : ls [-alrtAFR] [name...]
参数:
-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出
-r 将档案以相反次序显示(原定依英文字母次序)
-t 将档案依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有档案,则以下之档案亦皆依序列出

范例:
列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 :
ls -ltr s*
将 /bin 目录以下所有目录及档案详细资料列出 :
ls -lR /bin
列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*" :
ls -AF

5》名称:cp
说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。
使用方式:
cp [options] source dest
cp [options] source... directory
参数:
-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb
将所有的C语言程式拷贝至 Finished 子目录中 :
cp *.c Finished
cp *.c /usr/share 将所有的C语言程式拷贝至 share 子目录中

6》名称:mv
说明:将一个档案移至另一档案,或将数个档案移至另一目录。使用方式:
mv [options] source dest
mv [options] source... directory
参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。
范例:
将档案 aaa 更名为 bbb :
mv aaa bbb
将所有的C语言程式移至 Finished 子目录中 :
mv -i *.c Finished

7》名称:rm
功能:删除档案及目录
使用方式:rm [options] name...
参数:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
范例:
删除所有C语言程式档;删除前逐一询问确认 :
rm -i *.c
将 Finished 子目录及子目录中所有档案删除 :
rm -r Finished

8》名称:cat,zcat
说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案),在linux使用中一般用来打补丁
使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting

范例:
zcat 2.6.17-at91.patch.gz | patch -d linux-2.6.17.3 / -p1  给linux打上at91的补丁
cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3

9》tar命令语法格式
tar[主选项+辅助选项]文件或目录
主选项:
c创建新的档案文件,如果用户想备份一个目录或者是文件,就选择此项
r把要存档的文件追加到档案文件末,如果用户已完成备份文件,又发现还有一部分文件或目录忘记了,就可以使用此项
t列出档案文件的内容,察看已经备份了哪些文件
u更新文件
x从档案中释放文件
辅助选项主要有:
f使用档案文件或设备,此项为常为必选项
k保存已存的文件,还原时遇到相同的文件不会进行覆盖
v详尽报告tar处理的文件信息
z用gzip来压缩/解压文件
j  使用 bzip2 来压缩 tar 文件。

范例:
tar jxvf linux-2.6.17.3.tar.bz2 -C /home/control/kernel 将linux解到kernel目录下

10》如何运行linux时访问windows分区
首先需要知道windows分区的位置,可以通过
比如挂在IDE硬盘的C盘,FAT分区
mkdir /mnt/winC
mount ?t vfat /dev/hda1 /mnt/winC
NTFS分区则写成
mount ?t ntfs /dev/hda1 /mnt/winC
cd /mnt/winC
如果像每次引导系统自动挂载windows分区则必须修改/etc/fstab文件,在文件中添加如下新行
/dev/hda1 /mnt/winC vfat auto,umask=0 0 0

11》用法 : find
使用说明 :将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。

find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression∶

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比档案 file 更晚被读取过的档案
-atime n : 在过去 n 天过读取过的档案
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比档案 file 更新的档案
-ctime n : 在过去 n 天过修改过的档案
-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写
-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写
-size n : 档案大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 档案类型是 c 的档案。
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档案
l: 符号连结
s: socket
-pid n : process id 是 n 的档案
范例:
将目前目录及其子目录下所有延伸档名是 c 的档案列出来。
# find . -name "*.c"
将目前目录其其下子目录中所有一般档案列出
# find . -ftype f
将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出
# find . -ctime -20

12》指令名称 : ln
说明 : Linux/Unix 档案系统中,有所谓的连结(link),简而言之就是不用拷贝而共享一个文件或者文件夹,从而减少磁盘空间的建立
我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。
ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。
使用方式 : ln [options] source dist,其中 option 的格式为 :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本
范例 :
将档案 yy 产生一个 symbolic link : zz
ln -s yy zz
将档案 yy 产生一个 hard link : zz
ln yy xx

14》vi
vim是一个小型文本编辑器,
编辑一个文件 :
vi text.c
就可以进入了编辑状态,键入i就可以编辑相应文本了,按<ESC>键就可以返回命令行模式,键入:wq就是保存并退出,q!是强制退出

4、学习一个小程序x86下的
用它来编译一个很简单的程序 helloworld.c
#include<stdio.h>
int main(void)
{
printf(”hello world\n”);
return 0;
}

$gcc helloworld.c -o helloworld
$./ helloworld   
通过以上便完成可输出一个hello world的小程序

5、编译linux内核
   1)准备工作:在实际开发中将会使用一个综合的、容易使用的目录结构组织各种软件和项目文件,所以建议在/home目录下建立自己的工作目录如:control-project
                     Control-project
    ────────────────────────────

control-module     daq-module     sysmgnt-module     user-interface
                         │
  ────────────┴───────────────────

Bootldr    build-tools  kernel   doc  rootfs   tools  tmp  images sysapps

我做了如上的目录结构
mkdir control-project
cd control-project
mkdir control-module daq-module sysmgnt-module user-interface
cd daq-module
mkdir bootldr build-tools kernel doc rootfs tools tmp omages sysapps
文件下载
下ftp://ftp.handhelds.org/projects/toolchain
ftp://ftp.kernle.org/pub/linux/kernel/v2.6/linux-2.17.3.tar.bz2
下载at91rm9200的补丁 http://maxim.org.za/AT91RM9200
然后将下载的所有文件拷贝到build-tools目录下
解压编译工具  tar jxvf arm-linux-gcc-3.4.1.tar.bz2 -C ../tools/
将交叉编译工具拷贝到所需要的目录下 cp -r /home/control-project/daq-module/tools/usr/local/arm/3.4.1 /home/control-project/daq-module/tools
解压内核  tar jxvf linux-2.17.3.tar.bz2  -C ../kernel/
给内核打补丁 zcat 2.6.17-at91.patch.gz | patch -d /home/control-project/daq-module/kernel/linux-2.6.17.3 / -p1  给linux打上at91的补丁
cd  /home/control-project/daq-module/kernel/linux-2.6.17.3 /
修改内核文件的Makefile,
vi Makefile
找到
ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?=
将其修改为
ARCH            ?= arm
CROSS_COMPILE  ?= /home/control-project/daq-module/tools/3.4.1/bin/arm-linux-
保存文件

用交叉编译工具编译内核源码后, 会在arch/arm/boot/下生成名为zImage的内核映像,在Boot loader的命令提示模式下使用下载命令完成内核加载到开发板的存储设备FLASH中。编译过程(相对以前版本的编译过程,2.6内核编译有所简化):
  make mrproper
  make menuconfig(字符界面,或者用make xconfig图形界面,但需要Qt库的支持,而make gconfig则需要GTK库的支持)
Multimedia devices 所有选项必须清空,否则linux编译通过不了,System Type 选择AT91,在Atmel AT91 System-On_Chip中选择和你硬件最相近的评估板选项,然后保存退出。
  make
  make bzImage
这样就编译完一个linux内核
  
6、9200程序下载
minicom -s  启动一个虚拟终端控制台,中间需要设置,作如下操作先按下ctrl a然后松手,再按z
设置通讯参数,AT91RM9200默认的波特率是115200,8位数据位,无校验,1位
停止位,无流量控制。
接通开发板电源,如果硬件没有问题,将在终端中开到连续输出的大写字母“C
(未完,待续)      

作者: zhaojiuhua   发布时间: 2006-07-29

已经入门了      

作者: 傻瓜   发布时间: 2006-08-14

怎么没有了阿,还没有完全搞定了      

作者: chenhuibest   发布时间: 2007-07-18

热门下载

更多