文档库 最新最全的文档下载
当前位置:文档库 › 嵌入式Linux笔记

嵌入式Linux笔记

嵌入式Linux笔记
嵌入式Linux笔记

个人笔记(嵌入式linux)

1、编译交叉工具链:

方法一:

1. get all the source files

linux-2.4.9.tar.gz, patch-2.4.9-ac9.gz, patch-2.4.9-ac9-rmk1.bz2, diff-2.4.9-ac9-rmk1-np1.gz, binutils-2.11.2.tar.gz, gcc-2.95.3.tar.gz, glibc-2.2.4.tar.gz, glibc-linuxthreads-2.2.4.tar.gz

2. install the binutils

# cd /tmp

# tar zxvf binutils-2.11.2.tar.gz

# cd binutils-2.11.2

# ./configure --target=armv4l-unknown-linux --prefix=/opt/host/armv4l

# make

# make install

3. make the binutils reachablel

# export PATH=/opt/host/armv4l/bin:$PATH

4. Installing gcc(c compiler)

# cd /tmp

# tar zxvf linux-2.4.9.tar.gz

# mv linux linux-2.4.9-ac9-rmk1-np1

# mv patch-2.4.9-ac9.gz patch-2.4.9-ac9-rmk1.bz2 diff-2.4.9-ac9-rmk1-np1.gz ./linux-2.4.9-

ac9-rmk1-np1

# cd linux-2.4.9-ac9-rmk1-np1 : kernel 2.4.9

# gzip -cd patch-2.4.9-ac9.gz | patch -p1 : Alan Cox patch

# bzip2 -cd patch-2.4.9-ac9-rmk1.bz2 | patch -p1 : Russell King patch

# gzip -cd diff-2.4.9-ac9-rmk1-np1.gz | patch -p1 : Nicholas Pitre patch

# make menuconfig : Do to create ARM header files. When you exit, select save item.

# make dep : Also do to create header files.

5. Now header files of the development version kernel are created at /usr/include directory. Copy them

to develop directory

Link /usr/include directory to /opt/host/armv41/armv41-unknown-linux/include by symbolic link.

# cd /opt/host/armv4l/armv4l-unknown-linux

# cd include : If not existing, make include directory.

# cp -a /usr/include/* . : Copy all header files under /usr/include dir to the current dir.

# ln -s /tmp/linux-2.4.9-ac9-rmk1-np1/include/asm-arm asm

# ln -s /tmp/linux-2.4.9-ac9-rmk1-np1/include/linux linux

6. Then, install GCC C compiler as following.

# cd gcc-2.95.3

# ./configure --target=armv4l-unknown-linux --prefix=/opt/host/armv4l

# make LANGUAGES=c

# make LANGUAGES=c install

7. Installing glibc

# cd /tmp

# tar zxvf glibc-2.2.4.tar.gz

# mv glibc-linuxthreads-2.2.4.tar.gz ./glibc-2.2.4

# cd glibc-2.2.4

# tar zxvf glibc-linuxthreads-2.2.4.tar.gz

--with-headers=/tmp/linux-2.4.9-ac9-rmk1-np1/include

--prefix=/opt/host/armv4l

# make

# make install

8. Installing gcc(c++ compiler)

# cd /tmp/gcc-2.95.3

# ./configure --target=armv4l-unknown-linux

--with-libs=/opt/host/armv4l/lib

--with-headers=/opt/host/armv4l/include

--prefix=/opt/host/armv4l

# make LANGUAGES="c c++"

# make LANGUAGES="c c++" install

方法2:

1、下载编译好的交叉工具链包并解压缩(crosstools-

2、创建用户:adduser ***,passwd ***

3、将crosstools-的所有者设为***:chown *** crosstools-

4、创建路径: mkdir /opt

5、将路径的所有者设为***: chown *** /opt

6、修改根目录的操作权限: chmod 777 /

7、切换用户: su ***

8、修改安装路径: vi demo-arm.sh

9、执行安装: ./demo-arm.sh

2、交叉GDB调试:

Arm板设置:gdbserver ip:端口号文件名

X86设置:gdb 文件名

target remote armip:端口号

detach(结束调试)

3、服务器配置:

一、NFS:

A.修改NFS配置文件/etc/exports,格式如下:

共享目录主机名1或IP1(参数1,参数2)主机名2或IP2(参数3,参数4)rw:可读写

ro:只读

root_squash:root用户的所有请求映射成如anonymous用户一样的权限

no_root_squash:保留共享文件的UID和GID

all_squash:共享文件的UID和GID映射匿名用户anonymous,适合共用目录

no_all_squash:保留共享文件的UID和GID

sync:资料同步写入到内存和硬盘中

async:资料先暂存内存中,非直接写硬盘

secure:NFS通过1024以下的安全TCP/IP端口发送

insecure:NFS通过1024以上的端口发送

hide:在NFS共享目录中不共享其子目录

no_hide:共享NFS目录的子目录

B.重新启动NFS服务

$ service nfs restart

服务可用用命令chkconfig nfs on 开机自动运行

挂载远程NFS目录命令: mount –t nfs –o nolock ip:/远程目录本地目录

二、samba:

A、修改samba配置文件/etc/samba/smb.conf:

a)修改interfaces=your ip/24

b)去掉最低下sharename的注释大致配置如下:

;comment=Inter a comment here

path=共享目录

valid users=root

browseable=yes

writable=yes

printable=no

create mode=0664

directory mode=0775

force user=nobody

force group=nobody

guest ok=yes

B、service smb restart

C、$ chkconfig tftp on

通过samba挂载远程目录的命令:

1)smbmount ‘\\ip\共享目录’本地挂载点

2)mount –t smbfs –o username=**,password=** //计算机名/远程目录本地目录

三、TFTP:

1)主机端创建目录如/tftpboot

2)重启tftp: $ service xinetd restart

3)$ chkconfig tftp on

4)tftp 的配置文件在/etc/xinetd.d/tftp,典型配置为:

disable=no

socket-type=dgram

protocol=udp

wait=yes

user=root

server=/usr/sbin/in.tftpd

server-args=-s /tftpboot

per_source=11

cps=1002

flags=IPV4

客户端配置:(以uboot为例)

先通过printenv查看环境变量

再通过setenv命令修改客户端ip:setenv ipaddr ***

设置主机端ip:setenv serverip ***

设置网卡地址:setenv ethaddr ***(如01:23:45:67:89:ab)

最后保存设置saveenv

通过tftp命令传送文件(如:tftp 0x30008000 zImage)

4、ar命令创建静态库(链接的时候解析,文件大执行快)

ar cs libmy.a //创建一个库

ar rs libmy.a 1.o //增加一个模块

ar rcs *.a *.o *.o *.o *.o 打包做库

gcc使用这个库的时候如:gcc *.c -lmy -o *

5、gcc做动态库(执行的时候解析,文件小执行慢)

gcc -shared *.o -o lib*.so

例:

编译:gcc -fPIC -g -c liberr.c -o liberrDyn

做库:gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberrDyn -lc

建立符号连接,使得这个库不要自动成为系统库,这个符号连接是soname:

ln -s liberr.so.1.0.0 liberr.so.1

另一个在链接库时使用:

ln -s liberr.so.1.0.0 liberr.so

链接动态库:

gcc -g errTest.c -o errTestDyn -L. –lerr

执行测试程序:

LD_LIBRARY_PATH=$(pwd) ./errTestDyn

6、elf文件与二进制文件

二进制文件:没有head信息,不带符号表,无法解析地址,一般用于烧写到目标板

Elf文件:有很多附加信息,这是为了便于分析调试,可以给二进制工具链分析,如果要烧写elf文件则需要知道它的entry point(在header中)

Elf文件的结构:

elf header

program header (段信息,执行时用)

segment

section header

7、vivi

a)bootloader启动过程:

从固态存储设备上启动的BootLoader大多都是2阶段的启动过程,也即启动过程可以分为 stage 1和 stage

2 两部分

Bootloader启动模式:启动加载和下载模式:

启动加载(Boot loading)模式:这种模式也称为“自主”(Autonomous)模式。即BootLoader从

目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种

模式是 BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这

种模式下。

下载(Downloading)模式:在这种模式下,目标机上的 BootLoader将通过串口连接或网络连接等通

信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常

首先被 BootLoader保存到目标机的 RAM 中,然后再被BootLoader写到目标机上的FLASH 类固态存

储设备中。BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统

更新也会使用BootLoader的这种工作模式。工作于这种模式下的BootLoader通常都会向它的终端用

户提供一个简单的命令行接口。

Stage1:

?硬件设备初始化。

?为加载 BootLoader 的 stage2 准备 RAM 空间。

?拷贝 BootLoader 的 stage2 到 RAM 空间中。

?设置好堆栈。

?跳转到 stage2 的 C 入口点。

Stage2:

?初始化本阶段要使用到的硬件设备(比如网络和串口)。

?检测系统内存映射(memory map),得知内存的大小等信息。

?将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。

?为内核设置启动参数。(这个后面会讲)

?调用内核。

b)vivi代码执行流程:

第一阶段:arch/s3c2410/head.S

reset(上电)——>hardware——>copy_myself(nand_read_ll)——>main

详细流程包括:

关WATCH DOG;

禁止所有中断;

初始化系统时钟;

初始化内存控制寄存器(ENTRY(memsetup)表示这个是一个内部符号,在本文件可以找到,和GLOBLE 相对) mem_cfg_val是一张表,表示内存访问的控制,主要包括bank的属性和时序);

检查是否从掉电模式唤醒;

点亮所有LED;

初始化UART0;

将vivi所有代码(包括阶段1和阶段2)从nand flash复制到SDRAM中

a.设置nand flash控制寄存器,

b.设置堆栈指针——调用C函数时必须先设置堆栈,

c.设置即将调用的函数nand_read_ll的参数,

d. 调用nand_read_ll进行复制,

e.进行一些检查工作

跳转到init/main.c执行

a.重新设置堆栈

b.设置main函数的参数

c.调用main函数

执行完head.S后内存图为:

第二阶段:init/main.c

Reset——>board_init——>mem_map_init——>heap_init——>mtd_dev_init——>init_priv_date

——>init_built_in_cmd——>boot

详细流程:

reset_handler用于将内存清零,代码在lib/reset_handle.c中

board_init调用init_time()和set_gpios()2个函数用于初始化定时器和设置各GPIO引脚功能

mem_map_init:建立页表,vivi使用段式页表,只需要一级页表。在.config中定义了CONFIG_S3C2410_NAND_BOOT。mem_map_nand_boot()函数调用mem_mapping_linear()函数来最终完成

建立页表的工作。页表存放在SDRAM物理地址0x33dfc000开始处,共16K:一个页表项4字节,共

有4096个页表项;每个页表项对应1M地址空间,共4G。mem_map_init先将4G虚拟地址映射到相

同的物理地址上 (不使用cache,不使用write buffer)——这样,对寄存器的操作跟未启动MMU时

是一样的;再将SDRAM对应的64M空间的页表项修改为使用cache。

heap_init:vivi中有一个全局变量static blockhead *gHeapBase,它是heap的链表头指针,通过它可以遍历所有blockhead数据结构。假设需要动态申请一块sizeA大小的内存,则mmalloc函

数从gHeapBase开始搜索blockhead数据结构,如果发现某个blockhead满足:

a. allocated = 0 //表示未分配

b. size > sizeA,则找到了合适的blockhead,

于是进行如下操作:

a.allocated设为1

b.如果size –sizeA > sizeof(blockhead),则将剩下的内存组织成一个新的blockhead,

放入链表中

c.返回分配的内存的首地址

释放内存的操作:直接将要释放的内存对应的blockhead数据结构的allocated设为0即可。

(对应的是mfree函数)

Mtd_dev_init:初始化数据结构mtd和mtd_chip,扫描所使用的NAND Flash的型号,构造MTD设备,即构造一个mtd_info的数据结构。

MTD设备的树形结构:

MTD?mtd[1]?struct one

|

?mtd[2]?struct two

|

?mtd[3]?struct three

每一个MTD设备的this指针都是自己nand_chip结构的地址。

在mtd_info结构中,对nand_flash结构作了封装,向上层提供统一的接口。比如,它根

据nand_flash提供的read_data(读一个字节)、read_addr(发送要读的扇区的地址)等函

数,构造了一个通用的读函数read,将此函数的指针作为自己的一个成员。而上层要读写

flash时,执行mtd_info中的read、write函数即可。

init_priv_date:

a.vivi自身使用的一些参数,比如传输文件时的使用的协议等;

b.linux启动命令;

c.nand flash的分区参数。

init_built_in_cmd: vivi操作界面中增加命令

boot:

a.获取源地址和size(kernel),目标地址

b.Copy kernel

c.获取machine type

执行完main.c后的内存分布图:

Flash图:

0(vivi) 128k(para) 192k(kernel) 1M(root)

c)vivi传送文件命令:

load flash vivi x

load flash kernel x

load flash root x

d)在vivi中增加命令并在Make menuconfig时增加选择这个命令的选项的步骤(例如加hello命令):

1)在Command.c文件中增加#ifdef CONFIG_CMD_HELLO add_command(&hello_cmd) #endif

2)在Command.c中增加command_hello的代码,格式和其它命令一样。

3)在lib/Config_cmd.in中增加选项bool ‘hello command’CONFIG_CMD_HELLO,这样在make menuconfig

(Config_cmd.in在arch/config.in中执行的,config.in由makefile调用)

8、UBOOT

a)Uboot的启动过程:

Stage1:

Uboot的执行入口:

1. board/crane2410/uboot.lds: ENTRY(_start) ==> cpu/arm920t/start.S: .globl _start

2. uboot代码区(TEXT_BASE = 0x33F80000)定义在board/crane2410/config.mk

?设置异常向量

?设置CPU为SVC模式

?关闭看门狗

?禁止所有中断

?设置CPU频率

?设置CP15, 失效指令(I)Cache和数据(D)Cache后, 禁止MMU与Cache

?配置内存区控制寄存器

?安装UBOOT使用的栈空间

这段代码只对不是从Nand Flash启动的代码段有意义,对从Nand Flash启动的代码,没有

意义。因为从Nand Flash中把UBOOT执行代码搬移到RAM有copy_myself这段代码完成的。

?清bss段

?进入C代码

Stage2:

调用一系列初始化函数

1.指定初始化函数表

init_fnc_t *init_sequence[] = {

cpu_init, /* cpu的基本设置 */

board_init, /* 开发板的基本初始化 */

interrupt_init, /* 初始化中断 */

env_init, /* 初始化环境变量 */

init_baudrate, /* 初始化波特率 */

serial_init, /* 串口通讯初始化 */

console_init_f, /* 控制台初始化第一阶段 */

display_banner, /* 通知代码已经运行到该处 */

dram_init, /* 配制可用的内存区 */

display_dram_config,

#if defined(CONFIG_VCMA9) || defined (CONFIG_CMC_PU2)

checkboard,

#endif

NULL,

};

执行初始化函数的代码如下:

for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {

if ((*init_fnc_ptr)() != 0) {

hang ();

}

}

2. 配置可用的Flash区

flash_init ()

3. 初始化内存分配函数

#if (CONFIG_COMMANDS & CFG_CMD_NAND)

puts ("NAND:");

nand_init(); /* 初始化 NAND */

5.初始化环境变量

env_relocate()

6. 外围设备初始化

devices_init()

7. I2C总线初始化

i2c_init();

8. LCD初始化

drv_lcd_init();

9. VIDEO初始化

drv_video_init();

10. 键盘初始化

drv_keyboard_init();

11. 系统初始化

drv_system_init();

初始化相关网络设备,填写IP、MAC地址等。

设置IP地址

/* IP Address */

gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr");

/* MAC Address */

{

int i;

ulong reg;

char *s, *e;

uchar tmp[64];

i = getenv_r ("ethaddr", tmp, sizeof (tmp));

s = (i > 0) ? tmp : NULL;

for (reg = 0; reg < 6; ++reg) {

gd->bd->bi_enetaddr[reg] = s ? simple_strtoul (s, &e, 16) : 0;

if (s)

s = (*e) ? e + 1 : e;

}

}

进入main_loop主循环

b)代码搬运:

为了支持NAND flash起动,S3C2410内建了内部的4k的SRAM缓存“Steppingstone”。当起动时,NAND flash最初的4k字节将被读入”Steppingstone”然后开始执行起动代码。通常起动代码会把NAND flash中的内容拷到SDRAM中以便执行主代码。使用硬件的ECC, NAND flash中的数据的有效性将会得到检测。

功能

1. NAND flash 模式:支持读/删除/编程 NAND Flash

2. 自动起动模式:在复位时起动代码将被读入”Steppingstone”中,然后开始执行起动代码。

3. 硬件ECC检测模块(硬件检测,软件纠正)

4. “Steppingstone” 4KB内部SRAM在起动后可以另外使用。

c)编译:首先执行make smdk2410_config,因为编译需要生产一个在include目录下叫做config.mk的文件,而

config.mk通过make smdk2410_config执行./mkconfig $(@:_config=) ** *** ** ** *** **指令通过调用mkconfig这个shell来生成,然后执行编译make all ARCH=arm

xzko2410_config : unconfig

@./mkconfig $(@:_config=) arm arm920t xzko2410 NULL s3c24x0

2)建立board/xzko2410目录,拷贝board/smdk2410下的文件到board/xzko2410目录,将smdk2410.c更名为xzko2410.c,并在makefile中修改smdk2410.o为xzko2410.o。

3)cp include/configs/smdk2410.h include/configs/bks2410.h

4)依照你自己开发板的内存地址分配情况修改board/bks2410/lowlevel_init.S文件,修改SMRDATA中各个参数的值(根据VIVI的值)。

SMRDATA:

.word(0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20

)+(B6_BWSCON<<24)+(B7_BWS CON<<28))

.word((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B

0_PMC))

.word((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2

)+(B1_PMC))

.word((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2

)+(B2_PMC))

.word

0x1f7c/*((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)

+(B3_PMC))*/

.word((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2

)+(B4_PMC))

.word((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2

)+(B5_PMC))

.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))

.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))

.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)

.word 0x31

.word 0x30

.word 0x30

这里只将.word 0x32 改成 .word 0x31

5) 在board/bks2410加入NAND Flash读函数,建立nand_read.c,内容和VIVI中相应文件一样。并在

Makefile中加入nand_read.o。

6)修改cpu/arm920t/start.S文件

在ldr pc, _start_armboot之前加入:

#ifdef CONFIG_S3C2410_NAND_BOOT

bl copy_myself

@ jump to ram

ldr r1, =on_the_ram

add pc, r1, #0

nop

nop

1: b 1b @ infinite loop

on_the_ram:

#endif

在_start_armboot: .word start_armboot之后加入:

#ifdef CONFIG_S3C2410_NAND_BOOT

copy_myself:

mov r10, lr

ldr r2, =0xf830 @ initial value

str r2, [r1, #oNFCONF]

ldr r2, [r1, #oNFCONF]

bic r2, r2, #0x800 @ enable chip

str r2, [r1, #oNFCONF]

mov r2, #0xff @ RESET command

strb r2, [r1, #oNFCMD]

@ get read to call C functions (for nand_read())

ldr sp, DW_STACK_START @ setup stack pointer

mov fp, #0 @ no previous frame, so fp=0 @ copy vivi to RAM

ldr r0, =UBOOT_RAM_BASE

mov r1, #0x0

mov r2, #0x20000

bl nand_read_ll

tst r0, #0x0

beq ok_nand_read

#ifdef CONFIG_DEBUG_LL

bad_nand_read:

ldr r0, STR_FAIL

ldr r1, SerBase

bl PrintWord

1:b 1b @ infinite loop

#endif

ok_nand_read:

#ifdef CONFIG_DEBUG_LL

ldr r0, STR_OK

ldr r1, SerBase

bl PrintWord

#endif

@ verify

mov r0, #0

ldr r1, =UBOOT_RAM_BASE

mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes

go_next:

ldr r3, [r0], #4

ldr r4, [r1], #4

teq r3, r4

bne notmatch

beq done_nand_read

bne go_next

notmatch:

#ifdef CONFIG_DEBUG_LL

sub r0, r0, #4

ldr r1, SerBase

bl PrintHexWord

ldr r0, STR_FAIL

ldr r1, SerBase

bl PrintWord

#endif

1:b 1b

done_nand_read:

#ifdef CONFIG_DEBUG_LL

ldr r0, STR_OK

ldr r1, SerBase

bl PrintWord

#endif

mov pc, r10

@ clear memory

@ r0: start address

@ r1: length

mem_clear:

mov r2, #0

mov r3, r2

mov r4, r2

mov r5, r2

mov r6, r2

mov r7, r2

mov r8, r2

mov r9, r2

clear_loop:

stmia r0!, {r2-r9}

subs r1, r1, #(8 * 4)

bne clear_loop

mov pc, lr

#endif @ CONFIG_S3C2410_NAND_BOOT

在文件的最后加入:

.align 2

DW_STACK_START:

.word STACK_BASE+STACK_SIZE-4

7)修改include/configs/bks2410.h文件,添加如下内容:/*

* Nandflash Boot

*/

#define CONFIG_S3C2410_NAND_BOOT 1

#define STACK_BASE 0x33f00000

/* NAND Flash Controller */

#define NAND_CTL_BASE 0x4E000000

#define bINT_CTL(Nb) __REG(INT_CTL_BASE + (Nb))

/* Offset */

#define oNFCONF 0x00

#define oNFCMD 0x04

#define oNFADDR 0x08

#define oNFDATA 0x0c

#define oNFSTAT 0x10

#define oNFECC 0x14

8)重新编译uboot

UBOOT的烧写内核和文件系统:

烧kernel:

擦除:nand erase 30000 1d0000

将kernel load到内存:loady 30000000 115200(30000000表示内存地址,115200为波特率)

烧写到flash:nand write 30000(30000即192k)

烧文件系统:

擦除:nand erase 200000 200000

将文件系统load到内存:loady 30000000 115200

烧写到flash:nand write 200000

最后执行:run bootcmd(bootcmd nand read 3000; bootm)

9、busybox

busybox将linux中bin和sbin目录中的命令shell做成一个文件,在内部生成一张表来索引各个命令项,即在代码层把例如ls与ls-main连起来,大大减小了文件系统的体积。

LINK c a表示在目录c下创建名为a的节点。

利用busybox制作根文件系统步骤:

1. build选项中需要加入交叉编译器的名字

2. installation options 加入build prefix

3.使用如下配置选项:

#

# Automatically generated make config: don't edit

#

HAVE_DOT_CONFIG=y

#

# Busybox Settings

#

#

# General Configuration

#

# CONFIG_NITPICK is not set

# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set

# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set

# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set

# CONFIG_SHOW_USAGE is not set

# CONFIG_FEATURE_VERBOSE_USAGE is not set

# CONFIG_LOCALE_SUPPORT is not set

CONFIG_GETOPT_LONG=y

# CONFIG_FEATURE_DEVPTS is not set

# CONFIG_FEATURE_CLEAN_UP is not set

# CONFIG_FEATURE_SUID is not set

# CONFIG_FEATURE_SUID_CONFIG is not set

# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set

# CONFIG_SELINUX is not set

CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"

#

# Build Options

#

CONFIG_STATIC=y

# CONFIG_BUILD_LIBBUSYBOX is not set

# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set

# CONFIG_FEATURE_SHARED_BUSYBOX is not set

# CONFIG_LFS is not set

USING_CROSS_COMPILER=y

CROSS_COMPILER_PREFIX="/usr/local/arm/3.3.2/bin/arm-linux-" # CONFIG_BUILD_AT_ONCE is not set

#

# Debugging Options

#

# CONFIG_DEBUG is not set

# CONFIG_DEBUG_PESSIMIZE is not set

# CONFIG_NO_DEBUG_LIB is not set

# CONFIG_DMALLOC is not set

# CONFIG_EFENCE is not set

CONFIG_DEBUG_YANK_SUSv2=y

#

# Installation Options

#

CONFIG_INSTALL_NO_USR=y

CONFIG_INSTALL_APPLET_SYMLINKS=y

# CONFIG_INSTALL_APPLET_HARDLINKS is not set

# CONFIG_INSTALL_APPLET_DONT is not set

PREFIX="./my_box1"

#

# Busybox Library Tuning

#

CONFIG_MD5_SIZE_VS_SPEED=2

#

# Applets

#

# Archival Utilities

#

# CONFIG_AR is not set

# CONFIG_FEATURE_AR_LONG_FILENAMES is not set

# CONFIG_BUNZIP2 is not set

# CONFIG_CPIO is not set

# CONFIG_DPKG is not set

# CONFIG_DPKG_DEB is not set

# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set

# CONFIG_GUNZIP is not set

# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set CONFIG_GZIP=y

# CONFIG_RPM2CPIO is not set

# CONFIG_RPM is not set

CONFIG_TAR=y

CONFIG_FEATURE_TAR_CREATE=y

# CONFIG_FEATURE_TAR_BZIP2 is not set

# CONFIG_FEATURE_TAR_LZMA is not set

# CONFIG_FEATURE_TAR_FROM is not set

CONFIG_FEATURE_TAR_GZIP=y

# CONFIG_FEATURE_TAR_COMPRESS is not set

# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y

# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set

# CONFIG_UNCOMPRESS is not set

# CONFIG_UNLZMA is not set

# CONFIG_FEATURE_LZMA_FAST is not set

# CONFIG_UNZIP is not set

#

# Common options for cpio and tar

#

# CONFIG_FEATURE_UNARCHIVE_TAPE is not set

# CONFIG_FEATURE_DEB_TAR_GZ is not set

# CONFIG_FEATURE_DEB_TAR_BZ2 is not set

# CONFIG_FEATURE_DEB_TAR_LZMA is not set

#

# Coreutils

#

# CONFIG_BASENAME is not set

# CONFIG_CAL is not set

CONFIG_CAT=y

# CONFIG_CATV is not set

# CONFIG_CHGRP is not set

CONFIG_CHMOD=y

CONFIG_CHOWN=y

# CONFIG_CMP is not set

# CONFIG_COMM is not set

CONFIG_CP=y

# CONFIG_CUT is not set

CONFIG_DATE=y

CONFIG_FEATURE_DATE_ISOFMT=y

CONFIG_DD=y

CONFIG_FEATURE_DD_SIGNAL_HANDLING=y

# CONFIG_FEATURE_DD_IBS_OBS is not set

CONFIG_DF=y

# CONFIG_DIFF is not set

# CONFIG_FEATURE_DIFF_BINARY is not set

# CONFIG_FEATURE_DIFF_DIR is not set

# CONFIG_FEATURE_DIFF_MINIMAL is not set

# CONFIG_DIRNAME is not set

# CONFIG_DOS2UNIX is not set

# CONFIG_UNIX2DOS is not set

# CONFIG_DU is not set

# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set CONFIG_ECHO=y

CONFIG_FEATURE_FANCY_ECHO=y

# CONFIG_ENV is not set

# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set

# CONFIG_EXPR is not set

# CONFIG_EXPR_MATH_SUPPORT_64 is not set

# CONFIG_FALSE is not set

# CONFIG_FOLD is not set

# CONFIG_HEAD is not set

# CONFIG_FEATURE_FANCY_HEAD is not set

# CONFIG_HOSTID is not set

# CONFIG_ID is not set

# CONFIG_INSTALL is not set

# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set

# CONFIG_LENGTH is not set

CONFIG_LN=y

# CONFIG_LOGNAME is not set

CONFIG_LS=y

CONFIG_FEATURE_LS_FILETYPES=y

CONFIG_FEATURE_LS_FOLLOWLINKS=y

CONFIG_FEATURE_LS_RECURSIVE=y

CONFIG_FEATURE_LS_SORTFILES=y

CONFIG_FEATURE_LS_TIMESTAMPS=y

CONFIG_FEATURE_LS_USERNAME=y

CONFIG_FEATURE_LS_COLOR=y

# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set

# CONFIG_MD5SUM is not set

CONFIG_MKDIR=y

# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set

CONFIG_MV=y

# CONFIG_FEATURE_MV_LONG_OPTIONS is not set # CONFIG_NICE is not set

# CONFIG_NOHUP is not set

# CONFIG_OD is not set

# CONFIG_PRINTENV is not set

# CONFIG_PRINTF is not set

CONFIG_PWD=y

# CONFIG_REALPATH is not set

CONFIG_RM=y

CONFIG_RMDIR=y

# CONFIG_SEQ is not set

# CONFIG_SHA1SUM is not set

# CONFIG_SLEEP is not set

# CONFIG_FEATURE_FANCY_SLEEP is not set

# CONFIG_SORT is not set

# CONFIG_FEATURE_SORT_BIG is not set

# CONFIG_STAT is not set

# CONFIG_FEATURE_STAT_FORMAT is not set

# CONFIG_STTY is not set

# CONFIG_SUM is not set

# CONFIG_SYNC is not set

# CONFIG_TAIL is not set

# CONFIG_FEATURE_FANCY_TAIL is not set

# CONFIG_TEE is not set

# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set CONFIG_TEST=y

# CONFIG_FEATURE_TEST_64 is not set

CONFIG_TOUCH=y

# CONFIG_TR is not set

# CONFIG_FEATURE_TR_CLASSES is not set

# CONFIG_FEATURE_TR_EQUIV is not set

# CONFIG_TRUE is not set

# CONFIG_TTY is not set

CONFIG_UNAME=y

# CONFIG_UNIQ is not set

# CONFIG_USLEEP is not set

# CONFIG_UUDECODE is not set

# CONFIG_UUENCODE is not set

# CONFIG_WATCH is not set

# CONFIG_WC is not set

# CONFIG_WHO is not set

# CONFIG_WHOAMI is not set

# CONFIG_YES is not set

#

# Common options for cp and mv

#

#

# Common options for ls, more and telnet

#

CONFIG_FEATURE_AUTOWIDTH=y

#

# Common options for df, du, ls

#

# CONFIG_FEATURE_HUMAN_READABLE is not set

# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set

#

# Console Utilities

#

# CONFIG_CHVT is not set

CONFIG_CLEAR=y

# CONFIG_DEALLOCVT is not set

# CONFIG_DUMPKMAP is not set

# CONFIG_LOADFONT is not set

# CONFIG_LOADKMAP is not set

# CONFIG_OPENVT is not set

# CONFIG_RESET is not set

# CONFIG_SETCONSOLE is not set

# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set

# CONFIG_SETKEYCODES is not set

# CONFIG_SETLOGCONS is not set

#

# Debian Utilities

#

# CONFIG_MKTEMP is not set

# CONFIG_PIPE_PROGRESS is not set

# CONFIG_READLINK is not set

# CONFIG_FEATURE_READLINK_FOLLOW is not set

# CONFIG_RUN_PARTS is not set

# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set CONFIG_START_STOP_DAEMON=y

CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y

# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set CONFIG_WHICH=y

#

# Editors

#

# CONFIG_AWK is not set

# CONFIG_FEATURE_AWK_MATH is not set

# CONFIG_ED is not set

# CONFIG_PATCH is not set

CONFIG_FEATURE_VI_COLON=y

CONFIG_FEATURE_VI_YANKMARK=y

CONFIG_FEATURE_VI_SEARCH=y

CONFIG_FEATURE_VI_USE_SIGNALS=y

CONFIG_FEATURE_VI_DOT_CMD=y

CONFIG_FEATURE_VI_READONLY=y

CONFIG_FEATURE_VI_SETOPTS=y

CONFIG_FEATURE_VI_SET=y

CONFIG_FEATURE_VI_WIN_RESIZE=y

CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y

#

# Finding Utilities

#

CONFIG_FIND=y

CONFIG_FEATURE_FIND_PRINT0=y

CONFIG_FEATURE_FIND_MTIME=y

CONFIG_FEATURE_FIND_MMIN=y

CONFIG_FEATURE_FIND_PERM=y

CONFIG_FEATURE_FIND_TYPE=y

CONFIG_FEATURE_FIND_XDEV=y

CONFIG_FEATURE_FIND_NEWER=y

CONFIG_FEATURE_FIND_INUM=y

CONFIG_FEATURE_FIND_EXEC=y

CONFIG_GREP=y

CONFIG_FEATURE_GREP_EGREP_ALIAS=y

CONFIG_FEATURE_GREP_FGREP_ALIAS=y

CONFIG_FEATURE_GREP_CONTEXT=y

# CONFIG_XARGS is not set

# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set # CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set

# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set

# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set

#

# Init Utilities

#

CONFIG_INIT=y

# CONFIG_DEBUG_INIT is not set

CONFIG_FEATURE_USE_INITTAB=y

# CONFIG_FEATURE_INIT_SCTTY is not set

CONFIG_FEATURE_EXTRA_QUIET=y

# CONFIG_FEATURE_INIT_COREDUMPS is not set

CONFIG_FEATURE_INITRD=y

CONFIG_HALT=y

# CONFIG_MESG is not set

#

CONFIG_FEATURE_SHADOWPASSWDS=y

# CONFIG_USE_BB_SHADOW is not set

# CONFIG_USE_BB_PWD_GRP is not set

# CONFIG_ADDGROUP is not set

# CONFIG_DELGROUP is not set

# CONFIG_ADDUSER is not set

# CONFIG_DELUSER is not set

# CONFIG_GETTY is not set

# CONFIG_FEATURE_UTMP is not set

# CONFIG_FEATURE_WTMP is not set

# CONFIG_LOGIN is not set

# CONFIG_FEATURE_SECURETTY is not set

# CONFIG_PASSWD is not set

# CONFIG_SU is not set

# CONFIG_SULOGIN is not set

# CONFIG_VLOCK is not set

#

# Linux Ext2 FS Progs

#

# CONFIG_CHATTR is not set

# CONFIG_E2FSCK is not set

# CONFIG_FSCK is not set

# CONFIG_LSATTR is not set

# CONFIG_MKE2FS is not set

# CONFIG_TUNE2FS is not set

# CONFIG_E2LABEL is not set

# CONFIG_FINDFS is not set

#

# Linux Module Utilities

#

CONFIG_INSMOD=y

# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set # CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set

# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set

# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set CONFIG_RMMOD=y

CONFIG_LSMOD=y

# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set # CONFIG_MODPROBE is not set

# CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS is not set

#

# Options common to multiple modutils

#

CONFIG_FEATURE_CHECK_TAINTED_MODULE=y

嵌入式linux基本操作实验一的实验报告

实验一linux基本操作实验的实验报告 一实验目的 1、熟悉嵌入式开发平台部件,了解宿主机/目标机开发模式; 2、熟悉和掌握常用Linux的命令和工具。 二实验步骤 1、连接主机和目标板;(三根线,网线直接连接实验箱和PC机,实验箱UART2连接主机的UART口)。 2、Linux命令的熟悉与操作 PC端:在PC机的桌面上打开虚拟机,并启动Linux系统,打开命令终端,操作Linux基本命令,如:查看:ls,进入目录:cd,创建文件:mkdir,删除文件:rmdir,配置网络:ifconfig,挂载:mount,设置权限:chmod,编辑器:vi,拷贝:cp等命令,要求能熟练操作。 使用方法: 1.查看:ls Ls列出文件和目录 Ls–a 显示隐藏文件 Ls–l 显示长列格式ls–al 其中:蓝:目录;绿:可执行文件;红:压缩文件;浅蓝:链接文件;灰:其他文件;红底白字:错误的链接文件 2.进入目录:cd 改变当前目录:cd 目录名(进入用户home目录:cd ~;进入上一级目录:cd -) 3.创建文件:mkdir 建立文件/目录:touch 文件名/mkdir目录名 4.删除文件:rmdir 删除空目录:rmdir目录名 5.配置网络:ifconfig 网络- (以太网和WIFI无线) ifconfig eth0 显示一个以太网卡的配置 6.挂载:mount mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘- 确定目录'/ mnt/hda2' 已经存在 umount /dev/hda2 卸载一个叫做hda2的盘- 先从挂载点'/ mnt/hda2' 退出fuser -km /mnt/hda2 当设备繁忙时强制卸载 umount -n /mnt/hda2 运行卸载操作而不写入/etc/mtab文件- 当文件为只读或当磁盘写满时非常有用 mount /dev/fd0 /mnt/floppy 挂载一个软盘 mount /dev/cdrom /mnt/cdrom挂载一个cdrom或dvdrom mount /dev/hdc /mnt/cdrecorder挂载一个cdrw或dvdrom mount /dev/hdb /mnt/cdrecorder挂载一个cdrw或dvdrom mount -o loop file.iso /mnt/cdrom挂载一个文件或ISO镜像文件

LInux 嵌入式操作系统期末试题

1.简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系 统应用的需要,在产品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 2.嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4. 性能优异 5.良好的网络支持 3.linux文件类型:1.普通文件 2.目录文件 3.链接文件 4.设备文件 a.块设备文件(硬 盘:/dev/hda1)b.字符设备(串行端口接口设备) 4.linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所 属用户组 o:其他用户第一个字符显示文件类型:-普通d目录 l 链接… 5.简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 6.编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之 后编写shell文件,删除所有用户

什么是嵌入式linux系统

什么是嵌入式linux系统? 一、什么是嵌入式linux? Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作系统领域内也获得了飞速发展。嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。嵌入式Linux既继承了intelnet上无限的开放原代码资源,又具有嵌入式操作系统的特性。 二、嵌入式Linux的特点版权费:免费; 购买费用:媒介成本; 技术支持:全世界的自由软件开发者提供支持; 网络特性:免费而且性能优异; 软件移植:容易,代码开放,有许多应用软件支持; 应用产品开发周期:短,新产品上市迅速,因为有许多公开的代码可以参考和移植; 实时性能:RT_Linux,hardhat Linux 等嵌入式Linux支持实时性能; 稳定性:好; 安全性:好。 三、嵌入式Linux的市场前景和商业机会 嵌入式Linux有巨大的市场前景和商业机会,出现了大量的专业公司和产品,如Montavista、Lineo、Emi等。有行业协会,如Embedded Linux Consortum等。得到世界著名计算机公司和oem板级厂商的支持,例如IBM、Motorola、Intel等。传统的嵌入式系统厂商也采用了Linux策略如Lynxworks 、Windriver、QNX等。还有intelnet上的大量嵌入式Linux 爱好者的支持。嵌入式Linux支持几乎所有的嵌入式cpu和被移植到几乎所有的嵌入式oem板。 四、嵌入式Linux的应用领域嵌入式Linux的应用领域非常广泛,主要的应用领域有,信息家电:PDA,STB-Set-stopbox,Digital Telephone,Answering Machine,Screen Phone、数据网络:Ethernet switches,Router,Bridge,Hub,Remote access servers,ATM,Frame relay、远程通信、医疗电子、交通运输、计算机外设、工业控制、航空领域等。 五、嵌入式linux的优势嵌入式Linux的开发和研究是操作系统领域中的一个热点,目前已经开发成功的嵌入式系统中,大约有一半使用的是Linux。Linux之所以能在嵌入式系统市场上取得如此辉煌的成果,与其

《嵌入式系统与开发》构建嵌入式Linux系统-实验报告

《嵌入式数据库sqlite移植及使用》 实验报告 学生姓名:陈彤 学号:13004405 专业班级:130044 指导教师:孙国梓 完成时间:2016.5.31 实验3 嵌入式数据库sqlite移植及使用 一.实验目的 理解嵌入式软件移植的基本方法,掌握sqlite数据库软件移植的步骤,掌握sqlite开发的两种方式—命令模式和C代码开发模式的使用方法,并编程实现简单通讯录查询实验。 二.实验内容 实验3.1 移植嵌入式数据库sqlite 实验3.2 简单通讯录查询实例设计和测试 三.预备知识 Linux使用、数据库相关知识等 四.实验设备及工具(包括软件调试工具) 硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。 软件:WinXP或UBUNTU开发环境。 五.实验步骤 5.1 移植嵌入式数据库sqlite 步骤【参看教材103页】: 第一步,解压缩sqlite源码,命令tar zxvf sqlite-autoconf-3080900.tar.gz,在解压后的文件夹下,可以看到源码文件有shell.c 和sqlite3.c文件,生成Makefile的配置脚本文件configure.ac ,并检查当前文件夹下__A__(A.存在 B.不存在)Makefile文件。 第二步利用configure脚本文件生成基于ARM实验台的Makefile,具体命令为./configure CC=arm-linux-gcc –prefix=/opt/sqlite –host=arm-linux(假设安装目录为/opt/sqlite),并检查当前文件夹下___A__(A.存在 B.不存在)Makefile文件。 第三步,编译sqlite,命令为_make_,编译过程中使用的编译器为_ arm-linux-gcc _。 第四步,安装sqlit,命令为_make install_。安装完成后到_/opt/sqlite_文件夹下去查看相关文件,可以看到该文件夹下有_bin_、_include_、__lib__和share文件夹,其中可执行文件sqlite3位于_./bin_文件夹,库位于_./lib_文件夹。 第五步,将sqlite3拷贝到开发板bin目录下,将库下的文件拷贝到开发板的lib目录下【注意链接文件的创建】 第六步,数据库的使用 方式1:命令操纵数据库 在超级终端环境下创建数据库stucomm.db,命令为_sqlite3 stucomm.db_; 创建数据表stutable,字段包括id 整型,name 字符型,phoneNum 字符型,具体命令为_sqlite> create table stutable (id int(20),name char(20),phoneNum char(20));_; 插入2条记录,记录信息如下 001,zhangsan,10086 002,lisi,10000

华清远见嵌入式Linux课程

华清远见嵌入式Linux课程

课程名称:嵌入式学院—嵌入式LINUX工程师就业培训班 上课时间为:上午9:00—12:00 下午13:30—17:30 (每天7小时正式上课时间)晚自习18:00—21:00 第一阶段:嵌入式Linux软件工程师 ?职场定位:Linux Development Engineer for Software Engineering ?本期目标:嵌入式系统是现在最热门的计算机应用领域之一,嵌入式C语言在其中起着至关重要的作用。一个精通C语言程序设计的程序员,可以很容易地进入Linux、WinCE、Vxworks等嵌入式操作系统下的软件开发工作。本阶段学习目标是掌握C 语言基本知识、C编程语法基础和Linux操作系统的使用,并熟练掌握嵌入式Linux的开发环境,为将来的编程工作打基础。

2 嵌入式Lin ux C语言 高级编程 将在学员C语言基础知识之 上,通过大量编程实例重点讲 解C语言的高级编程知识,包 括函数与程序结构、指针、数 组、常用算法、库函数的使用 等知识,另外,本节还重点讲 解数据结构的基础内容,包括 链表、队列、栈、树、哈希表、 图等内容。 精通 3 C++面向 对象编程 C++是Linux应用开发主要语 言之一,本节重点让学员掌握 面向对象编程的基本思想,以 及C++语言的基础内容,为后 掌握

第二阶段:嵌入式Linux系统工程师 ?职场定位:Linux Development Engineer for Embedded Systems ?证书:微软嵌入式工程师认证证书(认证费500元),红帽公司《Linux应用开发工程师证书》(认证费500元) ?本期目标:参加本期培训的学员应该掌握嵌入式C 语言编程技巧。嵌入式Linux应用开发和系统开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。本期学习的主要目标是精通嵌入式Linux下的程序设计,熟悉嵌入式Linux开发流程,强化学员对Linux应用开发的理解和编码调试的能力,同时掌握bootloader和kernel的移植技能,了解ARM体系结构和编程,具备ARM硬件接口的基础知识,并了解Linux内核开发相关内容,初步掌握Linux下的驱动程序开发方法。另外,本期课程还会让学员了解另外一个比较重要的嵌入

嵌入式Linux系统期末考试简答题、运用题

简答题与应用题 什么是嵌入式系统?主要有什么特点? 以应用为中心,以计算机技术为基础的, 并且软件硬件是可剪裁的, 能满足应用系统对功能、 可靠性、成本、 体积、功耗等指标的严格要求的专用计算机系统。他可以实现对其他设备的控制、监视或者管理等功能。 与通用的 计算机系统相比,特点为: (1) (2) (5) 嵌入式系统通常由嵌入式处理机、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。 4、什么是Linux ?什么是嵌入式 Linux ? 答:严格来讲,Linux 是指由Linux 本人维护并不断更新的内核 。 一个嵌入式Linux 系统指的是一个基于 Linux 内核的,但不包含有关这个内核的任何专业的库或是用户工具 的嵌入式系统。 Linux 内核构建嵌入式操作系统有什么优势(优良特性)? 程度代码是可以获取的,可靠度高; 有完整的源码,软件丰富并且免费; 得到众多硬件生产家的广泛支持;包括 cpu 、计算机外 围设备 完善的通信协议、软件标准和文件管理机制; 提供完全免费且优秀的开发工具; 广泛的社群支持 无需购买lice nee ,是免费的; 不依赖特定厂商、供应商; 成本相对低廉。 6、 RTOS (嵌入式操作系统)强调的实时是什么概念?与中断的关系? 答:实时指的是特定操作所消耗的时间(以及空间)的上限是可预知的。操作系统能够在规定响应时间内完成客 户服务程序。中断程序响应中断并完成 是在固定时间内。 7、什么是实时LinUX ?涉及到哪些软硬件内容? 答:实时LinUX ( RT-Linux )通过在Linux 内核与硬件中断之间增加一个精巧的可抢先的实时内核 ,把标准的Linux 内核作为实时内核的一个进程与用户进程一起调度 ,标准的Linux 内核的优先级最低,可以被实时进程抢断。 正 常的Linux 进程仍可以在Linux 内核上运行,这样既可以使用标准分时操作系统即 Linux 的各种服务,又能提 供低延时的实时环境。它在硬件上涉及到硬件中断,软件上涉及到对高优先级的实时硬件中断的快速响应。 能在规定的时间内完成对突发事件的处理的 Linux 系统; 软件:中断服务程序、进程调度程序,硬件:嵌入式系统所采用的中断管理硬件。 8、试简要说明Linux 内核构成,并简要说明各部分的功能? 答: MMU :内存管理单元,完成地址映射(应用虚拟地址方式) VFS :虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方 1、 答: 面向特定应用,一般都有实时要求; 集先进性的计算机技术、半导体工艺、电子技术和通信网络技术于一体的并且在不断创新的知识集 成系统; 嵌入式系统是和具体应用对象有机结合在一起,因而其升级换代也是和具体的产品同步进行的。 嵌入式系统的软 硬件设计着重于高效率性。在最大限度满足应用需求的前提下,降低成本是必须要 考虑的主要问题。 嵌入式系统软件一般都固化在存储器芯片中。 (3) (4) 5、 用 答:( 1) (2) (3) (4) (5) (6) (7) (8) () 2、 答: 3、嵌入式操作系统的作用是什么?

嵌入式程序设计实验报告

实验一开发环境的搭建与配置 【实验目的】 1)熟悉嵌入式Linux开发平台。 2)掌握嵌入式Linux开发平台的开发环境搭建与配置。 3)了解minicom配置串口通信参数的过程。 4)了解嵌入式Linux的启动过程。 5)掌握程序交叉编译运行及调试的一般方法。 【实验内容】 1)连接实验开发板与宿主机。 2)在虚拟机中的CentOS(宿主机)搭建开发环境。 3)在宿主机中配置minicom。 4)分析嵌入式Linux的启动过程。 5)在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,然后传输到目标机上运行。 6)在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,用gdbserver进行远程调试。 【实验步骤】 连接实验开发板,对虚拟机进行设置 1)首先把实验开发板打开,用网线和串口线连接宿主机,并连接电源(注意这时不要拨动实验 开发板的开关按钮)。 2)在桌面上点击打开vmware 软件,选择“编辑虚拟机设置”,如下图所示:

图1 3)进入虚拟机配置界面后把网络连接方式设置为“桥接方式”,如图2所示: 图2

4)添加串口,如下图所示: 图3 5)完成串口的添加后,选择“OK”,完成对虚拟机的设置。如下图所示:

图4 6)选择虚拟机的“Edit”、“Virtual Network Editor...”,如下图所示:

图5 7)进入虚拟机网络参数设置界面后对VMnet0进行设置(注意这里桥接的网卡应选择与实验开 发板相连接的那块儿网卡),然后点击“Apply”、“OK”如下图所示:

图6 8)上述设置完成后启动CentOS(CentOS的用户名为“root”,密码为“xidianembed”)。 工具链的配置 1)在CentOS的根目录下创建一个名为“EELiod”的目录,把实验中要用到的文件(主要是一 些rpm包)拷贝到该目录下。(可以用U盘、WinSCP等工具进行,此处不再做详细说明)。 2)交叉编译工具链位于/opt/buildroot-2011.02/output/host/usr目录下,进入工具链的bin目录下, 可以看到一些编译工具,这些工具将会在之后的交叉编译过程中使用到。

华清远见嵌入式Linux课程

课程名称:嵌入式学院一嵌入式 LINUX 工程师就业培训班 9:00 —12:00 下午 13:30 —17:30 (每天 7小时正式上课时间) 晚自习 第一阶段:嵌入式Linux 软件工程师 职场定位: Li nux Developme nt Engin eer for Software Engin eeri ng 本期目标:嵌入式系统是现在最热门的计算机应用领域之一,嵌入式 C 语言在其中起着至关重要 的作用。一个精通 C 语言程序设计的程序员,可以很容易地进入 Linux 、WinCE Vxworks 等嵌入 式操作系统下的软件开发工作。 本阶段学习目标是掌握 C 语言基本知识、C 编程语法基础和 Linux 操作系统的使用,并熟练掌握嵌入式 Linux 的开发环境,为将来的编程工作打基础。 上课时间为:上午 18:00 — 21:00

第二阶段:嵌入式Linux系统工程师 职场定位:Linux Developme nt Engin eer for Embedded Systems 证书:微软嵌入式工程师认证证书(认证费500元),红帽公司《Linux应用开发工程师证书》 (认证费500元) 本期目标:参加本期培训的学员应该掌握嵌入式C语言编程技巧。嵌入式Linux应用开发和系统 开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。本期学习的主要目标是精通嵌入式Linux下的程序设计,熟悉嵌入式Linux开发流程,强化学员对Linux应用开发的 理解和编码调试的能力,同时掌握bootloader和kernel的移植技能,了解ARM体系结构和编程,具备ARM硬件接口的基础知识,并了解Linux内核开发相关内容,初步掌握Linux下的驱动程序 开发方法。另外,本期课程还会让学员了解另外一个比较重要的嵌入式操作系统:Win dows CE, 使学员在掌握嵌入式Linux的同时,也了解Windows CE的开发方法,拓展学员的知识面,丰富学 员的知识结构。最后通过几个典型的企业全真案例,进一步巩固本期课程内容,使学员真正学以致用。

LInux嵌入式操作系统期末试题

简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系统应用的需要,在产 品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4.性能优异 5.良好的网络支持 linux文件类型:1.普通文件2.目录文件3.链接文件4.设备文件a.块设备文件(硬盘:/dev/hda1)b.字符设备(串行端口接口设备) linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所属用户组o:其他用户第一个字符显示文件类型:- 普通 d 目录 l 链接… 简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之后编写shell文件,删除所有用户 操作步骤:1.打开Terminal(终端): 2.输入vi shell 3.输入i 进入编辑模式 4.输入 #!/bin/bash groupadd class1 for((i=1;i<10;i++)) do username=student0$i

嵌入式Linux系统

10-1 嵌入式Linux系统概述 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。 Linux在所有的操作系统中,Linux 是一个发展最快、应用最为广泛的操作系统。 所谓嵌入式Linux,是指Linux 在嵌入式系统中应用,而不是什么嵌入式功能。实际上,嵌入式Linux 和Linux 是同一件事。 10-2 Linux启动过程综述 一. Bootloader 二.Kernel引导入口 三.核心数据结构初始化--内核引导第一部分 四.外设初始化--内核引导第二部分 五.init进程和inittab引导指令 六.rc启动脚本 七.getty和login 八.bash 附:XDM方式登录 Bootloader 简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。 在Alpha/AXP平台上引导Linux通常有两种方法,一种是由MILO及其他类似的引导程序引导,另一种是由Firmware直接引导。MILO功能与i386平台的LILO相近,但内置有基本的磁盘驱动程序(如IDE、SCSI等),以及常见的文件系统驱动程序(如ext2,iso9660等),firmware有ARC、SRM两种形式,ARC具有类BIOS界面,甚至还有多重引导的设置;而SRM

嵌入式系统实验报告

郑州航空工业管理学院 嵌入式系统实验报告 (修订版) 20 – 20第学期 赵成,张克新 院系: 姓名: 专业: 学号: 电子通信工程系 2014年3月制

实验一ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容 1.ADS1.2 IDE的安装、环境配置及工程项目的建立; 2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加; (2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制; (4)使用查表法实现程序跳转; (5)使用BX指令切换处理器状态; (6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括和两个软件组件。在ADS1.2中建立类型的工程,工程目标配置为;接着,还需要对工程进行、及链接器设置;最后,配置仿真环境为仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名:

嵌入式LINUX系统的实现

嵌入式LI N UX系统的实现 检修厂 王小康 摘 要 嵌入式系统正变得越来越流行。被广泛地应用在各种网络设备、控制设备以及个人的数字工具如PDA中。文章论述了作者在嵌入式操作系统领域里所做的研究和实践工作,主要的工作围绕着将L i nux改造成嵌入式操作系统所进行的具体工作展开,包括单板配置代码,系统的引导与修改,核心映象定制与修改和调试工作。 1 引言 在当今数字信息技术、网络技术高速发展与发达的后PC时代,嵌入式系统无处不在,并将不断涌现出新的嵌入式应用系统。传统的操作系统软件[1][2]很难有效地支持嵌入式应用系统的快速开发,因而研究与开发嵌入式操作系统,对有效的支持广大的嵌入式应用系统开发具有重大意义,是十分必要的。L i n ux正在向嵌入式领域的各个方面进军,在不久的将来,我们可以发现嵌入式L i n ux的广泛的应用:各种车载嵌入式设备(GPS,电子地图)、消费电子设备、手持电脑(H PC,PDA)、蜂窝电话、Internet接入设备、工控设备以及各种网络的基础设施(网管设备,路由,网关,交换器,HUB等)[3]。 本文是围绕着嵌入式L i n ux系统的实现展开的。首先介绍嵌入式L i n ux系统的硬件结构和软件结构;然后对基于L i n ux的嵌入式实时操作系统的实现过程进行详细的阐述;最后是简短的总结。 2 嵌入式L inux系统的硬件结构 嵌入式L i n ux系统硬件系统是个微形化的专用PC,它包括系统主机扳、通讯接口板、图象处理和显示板、输入控制板以及存储板等。主机板可采用嵌入式X86CPU系列,图象处理和显示板能支持MPEG数字解压缩和电视终端显示,输入控制包括遥控键盘、遥控器和其他一些输入设备接口,存储板主要 要求。 7 设计报警和连锁保护系统 报警系统的作用在于及时提醒操作人员密切注意监视生产状况,以便采取措施减少事故的发生,连锁保护系统是指当生产出现严重事故时,为保证设备和人身的安全,使各个设备按一定次序紧急停下来。在焙烧炉的炉顶温度控制中,根据工艺要求,一个高限报警温度为480度;三个连锁保护温度设定,一个超高限报警温度自动连锁烧嘴,引起烧嘴自动熄火,从而立即引起调节阀的自动关闭,防止煤气流入焙烧炉,一个低限位报警温度用来连锁模式的切换,使模式从酸模式自动切换到水模式,另一个超低限位报警温度用来连锁三个喷枪,使得三个喷枪自动从焙烧炉提升出来,从而保护喷枪。 8 控制系统的调试和运行状况 控制系统安装完成后,应随生产过程进行试运行,按控制要求检查和调整各控制仪表和设备的工作状况,包括调节器的P、I等参数整定,依次将全部控制系统投入运行,在从投入运行到现在有半年多的时间了,发现焙烧炉的炉顶温度控制效果好,系统运行比较稳定。 20

淮阴工学院嵌入式系统开发与应用实验报告实验四嵌入式Linux开发环境的搭建

实验四嵌入式Linux开发环境的搭建 一、实验目的 1、了解嵌入式Linux开发环境的作用 2、掌握相关服务器的安装 二、实验准备 硬件:JXARM9-2410教学实验箱,PC机 软件:Windows XP操作系统,ADS集成开发工具 三、实验过程 1、tftp网络配置 (1) 虚拟机网络配置 a. 点击虚拟机-设置,将网络适配器设置为自定义,并 指定虚拟网络为VMnet0。 b. 点击编辑-虚拟机网络参数-主机虚拟网络映射,并 且指定其桥接的网卡

c. Red Hat IP配置 ●点击系统设置-网络,双击eth0配置IP信息如下: 地址:172.20.11.243 子网掩码:255.255.255.0 默认网关地址:172.20.11.254 DNS: 210.29.152.4 ●点击激活,在弹出的对话框点击是按钮 ●

测试网络连接是否正常 方法一:在linux下,点击系统工具-终端,输入命令ping 172.20.11.243 方法二:在主系统中打开命令提示符,输入ping 172.20.11.243 (2)修改tftp的配置文件 a.在终端下输入gedit /etc/xinetd.d/tftp b.修改”disable=yes”为”=no”,点击保存,关闭gedit

c.重启xinetd服务,使刚才的更改生效,在终端里输入, /etc/init.d/xinetd restart d.进入tftpboot文件夹创建一个测试文件testfile e.取得tftpboot文件夹的所有权限,命令chmod 777 /tftpboot f.启动tftp测试上传和下载 2配置NFS服务器 a.设置:开始->系统设置->服务器设置->NFS服务器打开配置对话 框 第一步:点击添加nfs共享 第二步:输入目录/tftpboot 第三步:输入主机172.20.11.243 第四步:基本权限为读/写

嵌入式Linux考试复习

1、两次过程考核(20分左右) 2、嵌入式系统的定义 嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统,用于实现对其他设备的控制、监视或管理等功能 3、嵌入式系统与桌面通用系统的区别(列出来两个) (1)嵌入式系统中运行的任务是专用而确定的,而桌面通用系统需要支持大量的、需求多样的应用程序 (2) 嵌入式系统往往对实时性提出较高的要求。 (3)嵌入式系统中使用的操作系统一般是实时操作系统 (4) 嵌入式系统运行需要高可靠性保障,比桌面系统的故障容忍能力弱很多 (5) 嵌入式系统大都有功耗约束 (6) 嵌入式系统比桌面通用系统可用资源少得多,其开发需要专用工具和特殊方法 (7) 嵌入式系统开发是一项综合的计算机应用技术 4、(填空)文件的类型;ls –l 命令执行后后显示的文件各个属性的意思 文件的类型: 普通文件,目录文件,链接文件,设备文件,管道,堆栈,套接字 各个属性: (1)第一个字符显示文件的类型 (2)第一个字符之后有3个三位字符组: 第一个三位字符组表示对于文件拥有者(u)对该文件的权限;

第二个三位字符组表示文件用户组(g)对该文件的权限; 第三个三位字符组表示系统其他用户(o)对该文件的权限; 若该用户组对此没有权限,一般显示“-”字符 5、(选择题)文件系统 ext2和ext3 swap文件系统 vfat文件系统 NFS文件系统 ISO9660文件系统 内存文件系统:proc、sys、ramdisk 嵌入式文件系统:cramfs、jffs、yaffs等 6、linux 目录结构下面放什么(了解常用) /bin 该目录中存放Linux的常用命令 /boot 该目录下存放的都是系统启动时要用到的程序 /dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别/usr 用户应用程序和文件都存放在该目录下 /etc该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统等。 /home 用来存放该用户的主目录。

嵌入式Linux系统开发教程很完整的习题答案

嵌入式Linux系统开发教程很完整的习题答案

参考答案 第一章 一、填空题。 1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。 2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。 4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。 5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。 6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。 二、选择题 1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。(A) A、嵌入式处理器 B、嵌入式控制器 C、单片机 D、集成芯片 2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为,并作为一种软件平台逐步成为目前国际嵌入式系统的主流。(D) A、分时多任务操作系统 B、多任务操作系统 C、实时操作系统 D、实时多任务操作系统 3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。(B) A、Palm B、VxWorks C、Linux D、WinCE [在此处键入]

嵌入式基础实验报告

嵌入式基础实验报告 ——Linux下编译环境的设置 姓名:张耀丹 学号:131012692 班级:13级网络工程二班

一、实验目的 1、熟悉嵌入式Linux 开发环境,学会基于UP-CUP IOT-4412-II 型网关部分平台的Linux 开 发环境的配置和使用 2、利用arm-none-linux-gnueabi-gcc 交叉编译器编译程序,使用基于NFS 的挂载方式进行 实验,了解嵌入式开发的基本过程 二、实验环境 1、硬件:UP-CUP IOT-4412-II 型网关部分嵌入式实验平台,PC 机Pentium 500 以上, 硬盘 40G 以上,内存大于256M 2、软件:Vmware Workstation + Fedora Core 14 + 超级终端/Xshell + ARM-LINUX 交叉编译开 发环境 三、实验内容 1、本次实验使用Fedora14 操作系统环境,安装ARM-Linux 的开发库及编译器。创建一个新 目录,并在其中编写hello.c 和Makefile 文件。 2、学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。将已 经编译好的文件通过NFS 方式挂载到目标开发板上运行 四、实验步骤 实验目录:/UP-CUP4412/SRC/exp/basic/Cortex/ 1、编译源程序 (1)在宿主机端任意目录下建立工作目录CortexA9,实际光盘目录中已经给出本次实验所需全面文件及代码,存放在Cortex目录下。 [root@localhost ~]# mkdir CortexA9 [root@localhost ~]# cd CortexA9 (2)编写程序源代码 在Linux 下的文本编辑器有许多,常用的是vim 和Xwindow 界面下的gedit 等,我们在开发过程中推荐使用vim,用户需要学习vim 的操作方法,请参考相关书籍中的关于vim 的操作指南。Kdevelope、anjuta 软件的界面与vc6.0 类似,使用它们对于熟悉windows 环境下开发的用户更容易上手。 实际的CortexA9.c 源代码较简单,如下: #include main() { printf(“**********\n” ); printf(“CortexA9 \n”); printf(“**********\n” ); return 0; }

嵌入式Linux系统开发教程答案

1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力 、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用 、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。4、嵌入式处理器目前主要有 PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32 操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:嵌入式处理器、存储器(SDRAM、ROM等)、设备I/O接口等。2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为实时多任务操作系统,并作为一种软件平台逐步成为目前国际嵌入式系统的主流。3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是VxWorks 。4、嵌入式系统设计过程中一般需要考虑的因素不包括:(大小)5、在嵌入式系统中比较流行的主流程序有:(Angel、Blob、Red Boot )1、Linux具有UNIX的所有特性并且具有自己独特的魅力,主要表现在:开放性、多用户、多任务、友好的用户界面、设备独立性、丰富的网络功能、文件传输、远程访问、可靠的安全性、良好的可移植性、X Window系统、内存保护模式。2、Linux 作环境)、文件结构(File Structure)和实用工具。3、目前几乎所有的Linux ;查看当前路径应使用命令:pwd;的作用是:使linux.tar.gz文件 Linux内核主要由:进程调度,内存管理,虚拟文件系统,网络接口,进程间 (Red Flag)2、启动shell环境时,屏幕上显示“[arm@www home]$”,其中的arm 命令时,如果想对文件名中的不可显示字符用八进制逃逸字符显示,则应该选用的参数是(-b)。4、解 Linux用的文件系统是(ntfs)。1、ARM9系列微处理器在高性能和 5级整数流水线,指令执行效率更高;提供1.1MIPS/MHz的哈佛总线结构;支持32位ARM指令集和16位Thumb指令集;支持32位的高速AMBA总线接口。2、ARM芯片的内核一般包括以下几个单元:ARM9TDMI32RISC处理器、数据 本质上是内存中一段连续的地址,对其最常见的操作为“压栈”( 出)。1、在arm/thumb汇编语言程序中,程序是以程序段的形式呈现的。程序段是具有特有名称的相对独立的指令或数据序号。程序段有两大类型代码段、数据段。2、基于linux下GCC汇编语言,代码表号必须在一行的顶端,后面要加上:,注视的内容可以在前面加上@。 3、符号定义伪指令()、数据定义伪指令(Data Definition 4、linux下的嵌入式程序开发,主要需要的代码编辑器,如vi和gedit,另外还需要编译器gcc、调试器Vi编辑器基本上有三种基本状态,分别是:命令模式(command mode)、插入模式(insert mode)和底行模式(gcc编译文件生成可执行文件要经历四个相互关联的步骤:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。1.假如使用伪指令定义一个局部的数据量,变量名为temp,然后给其赋值为8,汇编代码为(GBLA temp;temp SET A 0x08;)2、在vi处于命令行模式时,如果需要对文本进行修改,欲在光标所在位置的下一个位置开始输入文字,则(按下字母“a”进入插入模式)3、当前vi 处于插入模式,先放弃对文本的修改,即不保存退出vi,则(先按下“ESC”后,再使用“:q!”命令)。4、经过汇编之后,生成的目标文件的后缀名为(.o)。 5、对代码文件code.c进行调试的命令为($gcc –g code.c –o code)。1、SMDK2440平台的开发板采用的处理器是S3C2440,其主频一般为400M。2、windows软件环境的设置一般包括以下几部分:超级终端的设置、DNW设置、GIVEIO驱动的设置和USB驱动3、在windows系统上建立基于linux嵌入式开发环境一般有三种方案可以选择分别是Windows系统下安装虚拟机Vmware、Windows+Linux双系统安装、基于Windows操作系统下的Cygwin4、UBUNTU的网络设置可以采用命令行方式、也可以采用图形界面操作方式来配置。5、开发板硬件平台是基于三星S3C2440的SMDK2440平台的目标板,使用的刻录软件为SJF2440。1、为了通过PC的串口和开发板进行交互,需要使用(超级终端)。2、在嵌入式linux的开发中,能实现上传下载文件、刻录文件、运行映像等功能工具是(DNW)。 3、由普通用户账户转为管理员账户登录,使用的命令为($su root)。 4、安装FTP服务器时,在终端输入的命令为($sudo apt-get install vsftpd)。 5、安装Telnet服务时,在终端输入的命令为($sudo apt-get install telnetd)1、交叉开发工具链就是为了编译、链接、处理和调试跨平台体系结构的程序代码执行工具链软件,通过带有不同的参数,可以实现编译、链接、处理、调试等不同的功能。2、linux经常使用的工具链软件有Binutils、Gcc、Glibc和Gdb。3、分布构建交叉编译工具链的制作过程需要以下几步编译binutils、编译辅助gcc编译器、编译glibc库、重新编译完整的gcc。4、使用crosstool构建交叉编译工具链的制作过程需要以下几步:准备工作、建立脚本文件、建立配置文件、执行脚本文件和编译gdb调试器。5、使用crosstool构建交叉编译工具链的制作过程中需要的配置文件,其主要作用是定义配置文件、定义生成编译工具链的名称、定义编译选项等。1.(binutils)十二进制程序处理工具,包括连接器,汇编器等目标程序处理的工具。2.构建交叉编译器的第一个步骤是(下载工具)。3、分析以下代码#export PRJROOT=/home/arm/armlinux #export TARGET=arm-linux #export PREFIX=$PRJROOT/$TARGET其中,变量PREFIX代表的路径为(/home/arm/armlinux)。4. Binutils是gnu工具之一,他包括连接器、汇编器和其他用于目标文件和档案的工具,特使二进制代码的处理维护工具。其中包括(ld)命令,他是把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。5.分布构建交叉编译链的过程有两次变异gcc,其中第二次进行编译的作用是(获得glibc库的支持) 。1、Bootloader,亦称引导加载程序,是系统加电后运行的第一段软件代码。2、一般Bootloader包含两种不同的操作模式:启动加载模式 的主要功能是引导操作系统启动,它的启动方式有网络启动、磁盘启动和Flash 运行的第一阶段主要完成以下工作:屏蔽所有中断、设置CPU的速度和时钟频率、RAM初始化、初始化LED和关闭 cache。1、在Bootloader的启动方式中,Flash启动方式通常有两种,一种是可以直接从Flash启动,另一种时可以将压缩的内存映像文件从Flash中复制、解压到RAM ,再从中启动。2、在各种Bootloader中,U-boot 是以PPCBoot和ARMBoot为基础的通用加载程序,并且在ARM、PowerPC以及MIPS等多种平台上运行。3、在编译Vivi之前将Vivi里所有的“*.o”和“*.o.flag”文件删除,以确保文件编译时没有错误或者警告发生,使用的命令格式为(make distclean)。4、编译Vivi时,如果编译成功,在/vivi里面会生成三个vivi文件,其中不包括文件(vivi.exe)。5、把二进制文件载入Flash或RAM使用的命令是(load)。1、ARM-Linux内核的配置系统由三个部分组成,它们分别是Makefile、配置文件和配置工具。2、配置工具一般包括配置命令解释器和配置用户界面,前者主要作用是对配置脚本中使用的配置命令进行解释;而后者则是提供基于字符界面、基于Ncurses图形界面以及基于X Window图形界面的用户配置界面。3、Makefile文件主要包含注释、编译目标定义和适配段。4、Linux内核常用的配置命令有make oldconfig、make config、make menuconfig 和make xconfig。其中以字符界面配置的命令是make config。5、内核编译结束后,会在“/arch/arm/boot/”目录下面和根目录下面生成一个名为zImage的内核镜像文件。1.linux内核中的makefile以及与makefile直接相关的文件不包括(后缀名为.in)。2.用户通过make config 配置后,产生了后缀名为(in.config)。3.rules.make文件定义了许多变量,最重要的是那些编译、连接列表变量,但不包括(O-OBJS)。4.在内核配置过程中,如果需要设置networking support这个选项,进入的菜单项是(General setup)。5.在linux系统中,我们既需要标记变量的符号,有需要变量的物理地址,两者同时需要的时候可以采用符号表的方式,其对应的文件为(System.map)。1、Linux下的文件系统主要分为三个层次:上层用户的应用程序对文件系统的系统调用、虚拟文件系统和挂载到VFS中的各种实际文件系统。2、三种常用的块驱动程序分别是Blkmem驱动层、RAMdisk驱动层、MTD驱动层JFFS2、Yaffs、Romfs和Cramfs。 4、基于RAM的文件系统常见的有Ramdisk和Ramfs/Tmp fs。 5、System V init、Busybox init1、(MTD驱动层)也支持在一块Flash上建立多个Flash分区,没一个分区作为一个MTD block设备,可以把系统软件数据等分配到不同的

相关文档
相关文档 最新文档