搜档网
当前位置:搜档网 › Linux2.6.34.2在TQ6410上的移植详解

Linux2.6.34.2在TQ6410上的移植详解

Linux2.6.34.2在TQ6410上的移植详解
Linux2.6.34.2在TQ6410上的移植详解

由于Linux2.6.34.2对S3C64xx有了一定的支持,所以采用Linux2.6.34.2版本的内核。

一、移植环境

主机:VMWare--Fedora 8

开发板:天嵌TQ6410—256M nandflash,Kernel:2.6.34.2

编译器:EABI-4.3.2_V0.1

u-boot:u-boot-2010.08

二、源码获得

内核源码到https://www.sodocs.net/doc/fc18684239.html,/下载;

三、移植步骤:

1.将Linux

2.6.34.2内核源码放到工作目录文件夹下,并解压。

#tar xzvf linux2.6.34.2.tar.gz –c /

#pwd

/

# cd linux2.6.34.2

2.修改内核源码根目录下的Makefile文件(CROSS_COMPILE =的值因个人情况而定,其他可以照做,蓝色部分为修改部分。)

#gedit Makefile

......

#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e

s/sun4u/sparc64/ \

# -e s/arm.*/arm/ -e s/sa110/arm/ \

# -e s/s390x/s390/ -e s/parisc64/parisc/ \

# -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )

......

#ARCH ?= $(SUBARCH)

#CROSS_COMPILE ?=

ARCH = arm

CROSS_COMPILE = /usr/local/arm/usr/local/arm/4.3.2/bin/arm-

none-linux-gnueabi-

3. 对于平台时钟的修改,可以查看内核顶层目录下的arch/arm/mach-s3c64xx/mach-smdk6410.c在smdk6410_mapio()函数中有声明为12000000,而开发板上的外部时钟也是12M所以不用修改。

4. 修改机器码,可以看到在arch/arm/mach-s3c64xx/mach-

smdk6410.c中MACHINE_START(SMDK6410,”SMDK6410”)是在uboot引导内核时需要对应的机器码。所以在arch/arm/tools/mach-types 文件中找到这个SMDK6410对应的机器码并改为888(uboot中是这样设置的)。

4. 配置内核,由于开始对s3c6410的内核支持结构不是很了解,所以可以采用默认配置内核。(arch/arm/configs/目录下是一般内核的默认配置)

#pwd

#/linux2.6.34.2

#cp –f arch/arm/configs/s3c6400_defconfig .config

可以使用make menuconfig对刚刚配置的内核根据具体的情况进行修改,开始我没有进行修改直接make zImage,最后在arch/arm/boot/目录下生成zImage镜像文件。

5.使用mkimage命令打包zImage并烧写到开发板上。

#mkimage –n ‘linux-2.6.34.2’ -A arm -O linux -C none -a 0xc0008000 -e 0xc0008000 -d zImage uImage

可以看到内核停在Starting kernel ...不能解压内核。

打印信息如下:

Booting image at c0008000 ...

Image Name: Linux-2.6.34.2

Created: 2010-08-10 0:13:40 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 1650092 Bytes = 1.6

MB Load Address:

c0008000

Entry Point: c0008000

Verifying Checksum ...

OK

Starting kernel ...

后来经过对比天嵌原来开发板上的内核是没有上面的打印信息的,在网上查找原因得知是内核引导指令的问题。原来:生成zImage的内核镜像文件可以通过UBOOT提供的go命令,通过mkimage命令,在zImage中加入头文件(镜像头长0x40,真正的内核入口向后偏移了0x40大小),生成uImage镜像文件,该文件就是执行bootm所需的内核镜像文件。以前uboot引导内核都是用bootm指令,这次用的go指令,所以才会出错。看来学习还是要深究啊。

直接烧写zImage系统引导内核成功了。可是对于内核的系统分区还没有添加,内核最后打印信息为:

Memory: 126516k/126516k available, 4556k reserved, 0K highmem

Virtual kernel memory layout:

vector : 0xffff0000 - 0xffff1000 ( 4 kB)

fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)

DMA : 0xffc00000 - 0xffe00000 ( 2 MB)

vmalloc : 0xc8800000 - 0xe0000000 ( 376 MB)

lowmem : 0xc0000000 - 0xc8000000 ( 128 MB)

modules : 0xbf000000 - 0xc0000000 ( 16 MB)

.init : 0xc0008000 - 0xc0024000 ( 112 kB)

.text : 0xc0024000 - 0xc0300000 (2928 kB)

.data : 0xc0300000 - 0xc0324920 ( 147 kB)

Please append a correct "root=" boot option; here are the available partitions:

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

Backtrace:

[] (dump_backtrace+0x0/0x114) from [] (dump_stack+0x18/0x1c)

r7:c7c11000 r6:00000000 r5:c0021a08 r4:c0325230

[] (dump_stack+0x0/0x1c) from [] (panic+0x4c/0xc0)

[] (panic+0x0/0xc0) from [] (mount_block_root+0x1e0/0x220)

r3:00000000 r2:00000000 r1:c7c27f60 r0:c02c5f65

[] (mount_block_root+0x0/0x220) from [] (mount_root+0xc4/0xfc)

[] (mount_root+0x0/0xfc) from [] (prepare_namespace+0x170/0x1c8)

r5:c0021a08 r4:c0324b60

[] (prepare_namespace+0x0/0x1c8) from [] (kernel_init+0x110/0x14c)

r5:00000000 r4:c0324920

[] (kernel_init+0x0/0x14c) from [] (do_exit+0x0/0x5a8)

r5:00000000 r4:00000000

继续努力啊,添加分区

6.由于linux2.6.34.2在s3c6410上的nand驱动支持不是很好,所以自己添加修改arch/arm/mach-s3c64xx/mach-smdk6410.c文件,添加Nand Flash的分区信息和Nand Flash的硬件信息。(蓝色字体为添加部分)

#pwd

#gedit mach-smdk6410.c

//add here

static struct mtd_partition s3c_partition_info[] = {

[0] = {

.name = "u-boot",

.offset = 0,

.size = 0x40000,

.mask_flags = MTD_CAP_NANDFLASH,

},

[1] = {

.name = "Kernel",

.offset = 0x200000,

.size = 0x300000,

.mask_flags = MTD_CAP_NANDFLASH,

},

[2] = {

.name = "Yaffs2",

.offset = 0x500000,

.size = MTDPART_SIZ_FULL,

}

};

static struct s3c2410_nand_set s3c_nandset[]=

{

[0]=

{

.name ="s3c24xx-nand",

.nr_chips = 1,

.nr_partitions =ARRAY_SIZE(s3c_partition_info),

.partitions =s3c_partition_info,

}

};

static struct s3c2410_platform_nand s3c_platform=

{

.tacls =0,

.twrph0 =30,

.sets = &s3c_nandset,

.nr_sets =ARRAY_SIZE(s3c_nandset),

};

//add here

static struct platform_device *smdk6410_devices[] __initdata = { #ifdef CONFIG_SMDK6410_SD_CH0

&s3c_device_hsmmc0,

#endif

#ifdef CONFIG_SMDK6410_SD_CH1

&s3c_device_hsmmc1,

#endif

&s3c_device_i2c0,

&s3c_device_i2c1,

&s3c_device_fb,

&s3c_device_ohci,

&s3c_device_usb_hsotg,

&s3c64xx_device_iisv4,

//add here

&s3c_device_nand,

//add here

}

static void __init smdk6410_map_io(void)

{

u32 tmp;

//add here

s3c_device_https://www.sodocs.net/doc/fc18684239.html, = "s3c6410-nand";

//add here

}

static void __init smdk6410_machine_init(void)

{

u32 cs1;

s3c_i2c0_set_platdata(NULL);

s3c_i2c1_set_platdata(NULL);

s3c_fb_set_platdata(&smdk6410_lcd_pdata);

//add here

s3c_nand_set_platdata(&s3c_platform);//

//add here

}

说明:

分析Linux内核中的nand flash驱动drivers/mtd/nand/s3c2410.c文件中的相应函数,其中的static int s3c2410_nand_setrate(struct s3c2410_nand_info *info)函数发现: struct s3c2410_platform_nand *plat = info->platform;

int tacls_max = (info->cpu_type == TYPE_S3C2412) ? 8 : 4;

…………

info->clk_rate = clkrate;

clkrate /= 1000; /* turn clock into kHz for ease of use */

if (plat != NULL) {

tacls = s3c_nand_calc_rate(plat->tacls, clkrate, tacls_max); twrph0 = s3c_nand_calc_rate(plat->twrph0, clkrate, 8);

twrph1 = s3c_nand_calc_rate(plat->twrph1, clkrate, 8);

} else {

/* default timings */

tacls = tacls_max;

twrph0 = 8;

twrph1 = 8;

}

if (tacls < 0 || twrph0 < 0 || twrph1 < 0) {

dev_err(info->device, "cannot get suitable timings\n");

return -EINVAL;

}

dev_info(info->device, "Tacls=%d, %dns Twrph0=%d %dns, Twrph1=%d %dns\n",

tacls, to_ns(tacls, clkrate), twrph0, to_ns(twrph0, clkrate), twrph1, to_ns(twrph1, clkrate));

由以上内容可以看出,如果内核并没有使用我们的s3c_platform结构体中的配置,就会采用

} else {

/* default timings */

tacls = tacls_max;

twrph0 = 8;

twrph1 = 8;

}

中的配置信息。这点和我们改的内核输出s3c24xx-nand s3c2440-nand: Tacls=4, 39ns Twrph0=8 79ns, Twrph1=8 79ns完全符合。

因此可以判断我们需要在mach-mini2440.c的smdk6410_machine_init(void)函数中增加

s3c_nand_set_platdata(&s3c_platform);

配置内核,支持NandFlash

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

[*] MTD partitioning support

<*> NAND Device Support --->

<*> NAND Flash support for S3C/S3C SoC

再次编译烧写,可以看到以下打印信息

NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for bad blocks

Bad eraseblock 517 at 0x0000040a0000

Bad eraseblock 1383 at 0x00000ace0000

Bad eraseblock 1737 at 0x00000d920000

Bad eraseblock 1897 at 0x00000ed20000

Bad eraseblock 1968 at 0x00000f600000

Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000040000 : "u-boot"

0x000000200000-0x000000500000 : "Kernel"

0x000000500000-0x000010000000 : "Yaffs2"

mice: PS/2 mouse device common for all mice

i2c /dev entries driver

sdhci: Secure Digital Host Controller Interface driver

sdhci: Copyright(c) Pierre Ossman

s3c-sdhci s3c-sdhci.0: clock source 0: hsmmc (133000000 Hz)

s3c-sdhci s3c-sdhci.0: clock source 1: hsmmc (133000000 Hz)

s3c-sdhci s3c-sdhci.0: clock source 2: mmc_bus (24000000 Hz)

mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using PIO

TCP cubic registered

VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5

VFS: Cannot open root device "mtdblock2" or unknown-block(31,2)

Please append a correct "root=" boot option; here are the available partitions: 1f00 256 mtdblock0 (driver?)

1f01 3072 mtdblock1 (driver?)

1f02 257024 mtdblock2 (driver?)

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2) Backtrace:

[] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c) r7:c0318350 r6:00008000 r5:c0339cb0 r4:c7c27f40

[] (dump_stack+0x0/0x1c) from [] (panic+0x4c/0xd0)

[] (panic+0x0/0xd0) from [] (mount_block_root+0x178/0x234) r3:00000000 r2:c7c3af2c r1:c7c27f40 r0:c02d5a38

[] (mount_block_root+0x0/0x234) from []

(mount_root+0xb0/0xf4)

[] (mount_root+0x0/0xf4) from []

(prepare_namespace+0x108/0x1c8)

r7:c001e378 r6:c0339600 r5:c001e378 r4:c001e388

[] (prepare_namespace+0x0/0x1c8) from []

(kernel_init+0x118/0x160)

r7:00000000 r6:c001d8b8 r5:c001db68 r4:c001db68

[] (kernel_init+0x0/0x160) from [] (do_exit+0x0/0x640)

r7:00000000 r6:00000000 r5:00000000 r4:00000000

以上红色部分是由于kernel还未支持yaffs文件系统才会有的错误。

在这要说明的:

1. 在./driver/mtd/nand目录下是关于nand的驱动,与硬件相关

的文件是s3c2410.c。如果使用其他的硬件的话可以替换此文件。

2. ./driver/mtd/nand/s3c2410.c中的s3c2410_nand_driver的.d

river中的name字段一定要与./arch/arm/plat-samsung/dev_nand.c(平台设备)中的s3c_device_nand中的name字段保持一致,这样才能进行调用。否则可能会出现na nd设备驱动不成功的现象。我的内核打印错误信息如下:

[] (strnlen+0x0/0x58) from [] (string+0x44/0xfc)

[] (string+0x4/0xfc) from [] (vsnprintf+0x458/0xa28)

r9:c033a5b0 r8:c7c27dd0 r7:c02efb56 r6:c02efb56 r5:c02efb57

r4:00000000

[] (vsnprintf+0x0/0xa28) from [] (vscnprintf+0x14/0x20) [] (vscnprintf+0x0/0x20) from [] (vprintk+0x80/0x38c)

r5:00000000 r4:c033a0f8

[] (vprintk+0x0/0x38c) from [] (printk+0x28/0x30)

[] (printk+0x0/0x30) from [] (add_mtd_partitions+0x2e0/0x7c 0)

r3:c031b578 r2:c031c1bc r1:70200000 r0:c02efb3c

[] (add_mtd_partitions+0x0/0x7c0) from [] (s3c24xx_nand_pro be+0x4b4/0x774)

[] (s3c24xx_nand_probe+0x0/0x774) from [] (platform_drv_pro be+0x20/0x24)

[] (platform_drv_probe+0x0/0x24) from [] (driver_probe_devi ce+0x80/0x18c)

[] (driver_probe_device+0x0/0x18c) from [] (__driver_attach +0x94/0x98)

[] (__driver_attach+0x0/0x98) from [] (bus_for_each_dev+0x6 8/0x94)

r7:c01705bc r6:c0333834 r5:c7c27ee0 r4:00000000

[] (bus_for_each_dev+0x0/0x94) from [] (driver_attach+0x20/ 0x28)

r7:c0333834 r6:c7c26000 r5:c0333834 r4:c02d872c

[] (driver_attach+0x0/0x28) from [] (bus_add_driver+0xa4/0x 260)

[] (bus_add_driver+0x0/0x260) from [] (driver_register+0x74 /0x15c)

[] (driver_register+0x0/0x15c) from [] (platform_driver_reg ister+0x4c/0x60)

r7:c03393c0 r6:c7c26000 r5:c001db58 r4:c001dae0

[] (platform_driver_register+0x0/0x60) from [] (s3c2410_nan d_init+0x1c/0x28)

[] (s3c2410_nand_init+0x0/0x28) from [] (do_one_initcall+0x 38/0x1c4)

[] (do_one_initcall+0x0/0x1c4) from [] (kernel_init+0xac/0x 160)

[] (kernel_init+0x0/0x160) from [] (do_exit+0x0/0x640)

r7:00000000 r6:00000000 r5:00000000 r4:00000000

Code: e24cb004 e3510000 e1a02000 0a00000d (e5d03000)

---[ end trace 48c84fc47f611133 ]---

Kernel panic - not syncing: Attempted to kill init!

Backtrace:

[] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c) r7:c7c24000 r6:c01469e4 r5:c0339cb0 r4:0000000b

[] (dump_stack+0x0/0x1c) from [] (panic+0x4c/0xd0)

[] (panic+0x0/0xd0) from [] (do_exit+0x548/0x640)

r3:c031d408 r2:c7c279a8 r1:c7c27884 r0:c02d8ea4

[] (do_exit+0x0/0x640) from [] (die+0x290/0x2dc)

[] (die+0x0/0x2dc) from [] (__do_kernel_fault+0x6c/0x8c) [] (__do_kernel_fault+0x0/0x8c) from [] (do_page_fault+0x14 8/0x200)

r9:00000005 r8:c7c27c20 r7:c7c24000 r6:70200000 r5:00000000

r4:c7c27c20

[] (do_page_fault+0x0/0x200) from [] (do_translation_fault+ 0x6c/0xa4)

[] (do_translation_fault+0x0/0xa4) from [] (do_DataAbort+0x 40/0xa4)

r7:c0318590 r6:00000005 r5:c7c27c54 r4:c0318540

[] (do_DataAbort+0x0/0xa4) from [] (__dabt_svc+0x4c/0x60) Exception stack(0xc7c27c20 to 0xc7c27c68)

7c20: 70200000 ffffffff 70200000 ff0a0004 00000000 c033a1dc c033a5b0 0000ffff

7c40: 70200000 c033a5b0 c033a1dc c7c27c74 c7c27c78 c7c27c68 c0148150 c01469e4

7c60: a0000093 ffffffff

[] (strnlen+0x0/0x58) from [] (string+0x44/0xfc)

[] (string+0x4/0xfc) from [] (vsnprintf+0x458/0xa28)

r9:c033a5b0 r8:c7c27dd0 r7:c02efb56 r6:c02efb56 r5:c02efb57

r4:00000000

[] (vsnprintf+0x0/0xa28) from [] (vscnprintf+0x14/0x20)

[] (vscnprintf+0x0/0x20) from [] (vprintk+0x80/0x38c)

r5:00000000 r4:c033a0f8

[] (vprintk+0x0/0x38c) from [] (printk+0x28/0x30)

[] (printk+0x0/0x30) from [] (add_mtd_partitions+0x2e0/0x7c 0)

r3:c031b578 r2:c031c1bc r1:70200000 r0:c02efb3c

[] (add_mtd_partitions+0x0/0x7c0) from [] (s3c24xx_nand_pro be+0x4b4/0x774)

[] (s3c24xx_nand_probe+0x0/0x774) from [] (platform_drv_pro be+0x20/0x24)

[] (platform_drv_probe+0x0/0x24) from [] (driver_probe_devi ce+0x80/0x18c)

[] (driver_probe_device+0x0/0x18c) from [] (__driver_attach +0x94/0x98)

[] (__driver_attach+0x0/0x98) from [] (bus_for_each_dev+0x6 8/0x94)

r7:c01705bc r6:c0333834 r5:c7c27ee0 r4:00000000

[] (bus_for_each_dev+0x0/0x94) from [] (driver_attach+0x20/ 0x28)

r7:c0333834 r6:c7c26000 r5:c0333834 r4:c02d872c

[] (driver_attach+0x0/0x28) from [] (bus_add_driver+0xa4/0x 260)

[] (bus_add_driver+0x0/0x260) from [] (driver_register+0x74 /0x15c)

[] (driver_register+0x0/0x15c) from [] (platform_driver_reg ister+0x4c/0x60)

r7:c03393c0 r6:c7c26000 r5:c001db58 r4:c001dae0

[] (platform_driver_register+0x0/0x60) from [] (s3c2410_nan d_init+0x1c/0x28)

[] (s3c2410_nand_init+0x0/0x28) from [] (do_one_initcall+0x 38/0x1c4)

[] (do_one_initcall+0x0/0x1c4) from [] (kernel_init+0xac/0x 160)

[] (kernel_init+0x0/0x160) from [] (do_exit+0x0/0x640)

r7:00000000 r6:00000000 r5:00000000 r4:00000000

7.添加yaffs文件系统的支持:

1、下载Yaffs2

https://www.sodocs.net/doc/fc18684239.html,/cgi-bin/viewcvs.cgi/

2、解压Yaffs2并将其加入Linux内核(打补丁的方式)

#cd yaffs2

#./patch-ker.sh c /linux-2.6.34.2/

3.修改配置文件,添加对yaffs文件系统的支持(同时也支持cramfs和

nfs文件系统)

File systems --->

Miscellaneous filesystems --->

<*> YAFFS2 file system support

-*- 512 byte / page devices

[ ] Use older-style on-NAND data format with pageStatus byte

[ ] Lets Yaffs do its own ECC

-*- 2048 byte (or larger) / page devices

[*] Autoselect yaffs2 format

[ ] Disable lazy loading

[ ] Turn off wide tnodes

[ ] Force chunk erase check

[*] Cache short names in RAM

< > Journalling Flash File System v2 (JFFS2) support

<*> Compressed ROM file system support (cramfs)

[*] Network File Systems --->

--- Network File Systems

最后重新编译烧写到开发板,打印信息为:

NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for bad blocks

Bad eraseblock 517 at 0x0000040a0000

Bad eraseblock 1383 at 0x00000ace0000

Bad eraseblock 1737 at 0x00000d920000

Bad eraseblock 1897 at 0x00000ed20000

Bad eraseblock 1968 at 0x00000f600000

Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000040000 : "u-boot"

0x000000200000-0x000000500000 : "Kernel"

0x000000500000-0x000010000000 : "Yaffs2"

mice: PS/2 mouse device common for all mice

i2c /dev entries driver

sdhci: Secure Digital Host Controller Interface driver

sdhci: Copyright(c) Pierre Ossman

s3c-sdhci s3c-sdhci.0: clock source 0: hsmmc (133000000 Hz)

s3c-sdhci s3c-sdhci.0: clock source 1: hsmmc (133000000 Hz)

s3c-sdhci s3c-sdhci.0: clock source 2: mmc_bus (24000000 Hz)

mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using PIO

TCP cubic registered

VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5

。。。

yaffs: dev is 32505858 name is "mtdblock2"

yaffs: passed flags ""

yaffs: Attempting MTD mount on 31.2, "mtdblock2"

block 478 is bad

block 1344 is bad

block 1698 is bad

block 1858 is bad

block 1929 is bad

yaffs_read_super: isCheckpointed 0

VFS: Mounted root (yaffs2 filesystem).

Freeing init memory: 140K

Warning: unable to open an initial console.

Kernel panic - not syncing: No init found. Try passing init= option to kernel.Kernel

panic - not syncing:

Backtrace:

[] (dump_backtrace+0x0/0x10c) from []

(dump_stack+0x18/0x1c)

r7:c0318350 r6:00008000 r5:c0339cb0 r4:c7c27f40

[] (dump_stack+0x0/0x1c) from [] (panic+0x4c/0xd0)

[] (panic+0x0/0xd0) from []

(mount_block_root+0x178/0x234)

r3:00000000 r2:c7c3af2c r1:c7c27f40 r0:c02d5a38

[] (mount_block_root+0x0/0x234) from []

(mount_root+0xb0/0xf4)

[] (mount_root+0x0/0xf4) from []

(prepare_namespace+0x108/0x1c8)

r7:c001e378 r6:c0339600 r5:c001e378 r4:c001e388

[] (prepare_namespace+0x0/0x1c8) from []

( kernel_init+0x118/0x160)

r7:00000000 r6:c001d8b8 r5:c001db68 r4:c001db68

[] (kernel_init+0x0/0x160) from [] (do_exit+0x0/0x640) r7:00000000 r6:00000000 r5:00000000 r4:00000000

文件系统还没有移植好所以只能到这了

ZC301摄像头移植

摄像头驱动的移植(ZC3XX) 一、普通设计 第一:首先确保所用的FS2410开发板上移植的是Linux-2.6.22.6内核,USB 及CS8900A均能工作 第二:移植驱动gspcav1-20071224.tar.gz: ( 1 ) 在linux-2.6.22.6/drivers/usb 目录下新建media 目录,将gspcav1-20071224.tar.gz copy 到 media 下并解压。为了使media 编译进内核,需修改linux-2.6.22.6/drivers/usb 目录下的Kconfig、Makefile 文件。具体操作: [linux@weijing usb]$ vi Kconfig 添加下面语句: source "drivers/usb/media/Kconfig" [linux@weijing usb]$ vi Makefile 添加下面语句: obj-$(CONFIG_USB_SPCA5XX) += media/ ( 2 )为添加 gspcav1-20071224 编译选项,在 media 下新建 Kconfig、Makefile 文件。 [linux@weijing media]$ vi Kconfig # # USB Multimedia device configuration # comment "USB Multimedia devices" depends on USB config USB_SPCA5XX tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras" depends on USB && VIDEO_DEV ---help--- Say Y or M here is you want to use one of these wedcams: The built-in microphone is enabled by selecting USB Audio support.

linux系统编程试卷(答案)

凌阳教育 嵌入式培训系统编程部分测试试题 注:考试为闭卷,程序题需上机操作运行出结果,考试时间为120分钟 一:选择题(本题共4小题,每题3分共12分) 1)下列不是Linux系统进程类型的是( D ) A 交互进程 B 批处理进程 C 守护进程 D 就绪进程(进程状态) 2)以下对信号的理解不正确的是( B ) A 信号是一种异步通信方式 B 信号只用在用户空间进程通信,不能和内核空间交互 C 信号是可以被屏蔽的 D 信号是通过软中断实现的 3)进程有三种状态( C ) A 准备态、执行态和退出态 B 精确态、模糊态和随机态 C 运行态、就绪态和等待态 D 手工态、自动态和自由态 4)不是进程和程序的区别( B) A 程序是一组有序的静态指令,进程是一次程序的执行过程 B 程序只能在前台运行,而进程可以在前台或后台运行 C 程序可以长期保存,进程是暂时的 D 程序没有状态,而进程是有状态的 二:填空题(本题共6小题,2)、3)两题每空四分,其余每空一分。共23分) 1) 列举八种常见的进程间通信方式无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字 网络上两个主机的进程间通信方式为套接字 2) 命名管道比无名管道的优势提供了一个可以访问的路径名,实现没亲缘关系的进程 间通信 3) 消息队列比命名管道和无名管道的优势可以按类型实现消息的随机查询,没必要先 进先出 4) 按照逻辑结构不同进行数据库划分,Sqlite 数据库属于哪一类关系型数据库 5) 在C语言中操作sqlite数据库,常用的2中方式是sqlite_exec(回调)、

sqlite_gettable(非回调) 6) 列举四种进程调度算法先来先调度(FCFS)、短进程优先调度(SPF)、高优先级调度 (HPF)、时间片轮转调度 三:问答题(本题共7题,每题5分,共35分) 1) 什么是系统调用?系统调用是通过什么方式陷入内核态的?请写出你对系统调用的理解。什么是文件I/O和标准I/O库?文件I/O和标准I/O库的区别? 系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以通过这组接口获得操作系统内核提供的服务。 系统调用是通过软件中断方式陷入内核的 linux的文件I/O是由操作系统提供的基本IO服务, 标准I/O库通过封装系统调用,提供了一个到底层I/O的接口。 标准I/O默认采用了缓冲机制,还创建了一个包含文件和缓冲区相关数据的数据结构;文件I/O一般没有采用缓冲模式,需要自己创建缓冲区。一种是标准库封装系统调用而成,更高级,一种是系统提供的,比较低级;标准I/O可移植性高、文件I/O可移植性低。 2) 什么是进程?用fork()创建一个子进程时,系统会做什么工作 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配的单位,不仅是系统内部独立运行的实体也是独立竞争资源的实体。 用fork()时系统会分配子进程一个ID号然后继承父进程的地址空间,包括进程上下文进程堆栈打开的文件描述符等等,他就是父进程的一个复制品。 3) 进程和线程有什么区别? 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在进程程中,由进程提供多个线程执行的控制。 进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 4) 什么是线程的互斥和同步,程序应怎样写才能达到互斥或同步? 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。 在写程序时可以用互斥锁和信号量实现线程同步,一个线程访问共享资源时给这个资源上锁其他线程就不能访问了直到上锁的进程释放互斥锁为止。 5) 什么是僵尸进程?孤儿进程?守护进程? 僵尸进程:僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成

android系统开发工作介绍

android系统开发工作介绍 一、android的开发工作 Android的开发分为三个类型:移植开发移动设备系统;android系统级开发和应用程序开发。 1、移植开发移动设备系统 2、Android系统级开发,指的是扩展android的框架或者是修改bug,这方面比较少,除非有些开发移动设备的厂商,比如做gps,可以往里面加入一些自己的特定系统东西,这可能导致一些不兼容。当然也可能是简单的修复bug,详细的内容后面还有说。 3、开发应用程序,这应该是比较主流的开发,也就是给android系统写应用程序。当然我们这里主要是研究android的framework如何给这些应用程序提供服务的。 总结一下,我们可以把android分为四个层次,从底层往上依次为:linux内核、C/C++库、java 框架和java应用程序。移植开发移动设备涉及到linux内核(包括其驱动);android系统级开发涉及到C/C++库的开发及给上层java框架;android应用程序开发就是调用java的框架写应用程序。 简单的从上到下,android应用程序需要有java框架支持,比如它要发送短信,就需要java 框架,java框架其实就是将C/C++库包装成为了一个JNI,而实现具体的功能是C/C++库,最后驱动硬件完成功能,这也就是linux内核部分。 所谓framework,也就是系统级开发,这将是本文的重点,虽然android的framework 开发比较少,但是对其了解后更有利于整体开发的进行,当然很多设备厂商还是非常需这要些的。 二、android系统架构

Linux内核及驱动、C/C++框架、java框架、java应用程序。 1)、Linux内核及驱动 其中linux内核及驱动是内核层的(本人对linux内核也有过痴迷的时候,就像现在android 痴迷一样),系统总是需要操作系统的支持的,比如内存管理、进程管网理、络协议栈等。 2)、android的C/C++框架 系统C库:用的是libc,没什么好说的,C程序员都知道。多媒体库SurFace Manager:显示子系统的管理器LibWebCore:web浏览器引擎,支持android浏览器SGL:skia图形库,底层的2D图形引擎 3D库:OpenGL FreeType:字体显示Android的运行环境,这个也应该属于这个框架里面的,android的虚拟机叫做Dalvik,运行环境就是由这个虚拟机和基础的java类库组成。 3)、android应用框架 提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器活、动管理器。 视图非常丰富:list、grid、text box、button等。内容提供器是使得应用程序可以访问另一个程序的数据。资源管理器是提供访问非代码的资源访问,如布局文件。通知管理器,使得程序可以在状态栏中显示自定义的提示信息。活动管理器,用来管理程序生命周期。 4)、android应用程序Android所有的应用程序都是用java写的,当然现在好像也支持一些脚本语言,如 ruby,但是不支持C开发,所谓支持C开发是指jni的形式。 。。。。。。。。。

关于【野火】OV7725例程移植【OV7670】总结

关于OV7725程序移植OV7670总结 用了三天的时间,终于搞定了程序的移植。也是第一次移植stm32程序。 最终的移植成功版本,改了SCCB通信、FIFO读写时序、寄存器配置、引脚修改的一些地方。 一、移植过程中SCCB通信遇到的问题 1.由于野火的OV7725摄像头内置上拉电阻,所以在配置时SDA和SDL都被设置成了Mode_OD (开漏模式),但是战舰带的OV7670摄像头并没有内置上拉电阻,所以不能用开漏模式,否则不能正常输出高电平,SDA线也不会被主机拉高。 于是参考了战舰的例程。战舰对SCL线设置为了PP(推挽输出模式),SDA线的输出则需要切换。如下: 在战舰的例程上进行修改时,由于需要修改一些IO口,所以需要把这句改掉。我尝试用这样的手法修改: 发现并不可行。查询网络,原因可能是在运行中途修改管脚模式时,由于32的LCKK:锁密钥,并不能直接修改管脚工作模式。我们选择对底层寄存器进行操作。。

于是乎这样改: *注:SDA为PC7口。 2. 还有需要修改的地方就是:在需要读取SDA电平状态的时候,要用SCCB_SDA_IN 这个语句把替换掉SDA_H,而不是先SDA_H 然后再SCCB_SDA_IN 。否则不能正确读取到SDA线的电平。 3.最后一步,器件ID: 在这一段代码用到: 二、FIFO读数据时序的修改 1.由于每个人选择的数据口可能不同,有的是0-7位,有的是8-15位,所以我这里给出了两种不同的读取时序。 H_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是8-15位时候用的; L_MY_READ_FIFO_PIXEL(YUV)是当数据位选择的是0-7位时候用的。 *注:因为我要的二值化的图像,所以只读取了YUV 分量中的Y分量。

《Linux系统应用与开发教程》所有课后习题和答案

《Linux系统应用与开发教程》所有课后习题和答案 第1章Linux概述 (1) 第2章shell及常用命令 (4) 第3章vi编辑器的使用 (7) 第4章X Window系统的使用 (9) 第5章Linux系统的常用软件 (11) 第6章硬件管理 (11) 第7章网络基本配置 (12) 第8章常用网络服务的配置和使用 (15) 第9章系统管理与监控 (19) 第10章Linux系统的安全管理 (21) 第11章shell程序设计 (24) 第12章gcc的使用与开发 (26) 第13章gtk+图形界面程序设计 (27) 第14章Qt图形界面程序设计 (28) 第15章集成开发环境KDevelop的使用 (31) 第1章 Linux概述 1.什么是Linux? Linux是一套免费使用和自由传播的类UNIX操作系统,源代码开放,能运行于各类硬件平台,包括Intel x86系列和RISC处理器。这个系统是由世界各地成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品。 2.Linux有哪些特性? (1)开放性 (2)多用户 (3)多任务 (4)良好的用户界面 (5)设备独立性 (6)丰富的网络功能

(7)可靠的系统安全 (8)良好的可移植性 3.Linux与Windows操作系统的主要区别是什么? (1)从发展的背景看,Linux是从一个比较成熟的操作系统发展而来的,而其他操作系统,如Windows等,都是自成体系,无对应的相依托的操作系统 (2)从使用费用上看,Linux是一种开放、免费的操作系统,Windows是封闭的系统,需要有偿使用。 (3)Linux上丰富的应用软件也是自由的,而在Windows下,几乎所有的软件都有独立的版权,需要购买使用,即使某些软件可以免费使用,也一般不提供其源代码,更不用说由用户修改扩充其功能了。 (4)Windows对硬件配置要求高,而Linux在低端PC系统上仍然可以流畅运行4.Linux与Unix的共同点与不同点是什么? 共同点:由于Linux是从Unix发展来到,它遵循Unix开放标准,基本支持同样的软件、程序设计环境和网络特性,可以说Linux是UNIX的PC版本,Linux在PC机上提供了相当于UNIX工作站的性能。 与商用Unix的不同点有:1)Linux是免费软件,用户可以从网上下载,而商用的UNIX除了软件本身的价格外,用户还需支付文档、售后服务费用;2)Linux拥有GNU软件支持,Linux能够运行GNU计划的大量免费软件,这些软件包括应用程序开发、文字处理、游戏等方面的内容;3)Linux的开发是开放的,任何志愿者都可以对开发过程做出贡献;而商用UNIX则是由专门的软件公司进行开发的。 与自由Unix的不同点: 1)在组织方式上,FreeBSD由它的核心团队(core team)的领导,他们负责原始程序的开发与维护。有core team的优点是原始程序会有一致性,会有组织的被更新,但是整个系统的活力操纵在core team手中,缺乏活力。Linux没有核心团队,在Linus的主导下来自世界各地的爱好者都可以发布自己的patch,缺点是源代码杂乱无章且可能会相互冲突。 2)在发展方向上,FreeBSD的核心团队将主要精力投入在UNIX自身的风格和特点上。Lin ux通常会首先加入商品化系统上的各种东西,比如新的硬件驱动、samba等。因此,从易用和可用上讲,Linux更容易上手和使用。 3)在系统核心功能上二者区别不大,但在Linux系统上,几乎可是找到任何需要的功能 4)在系统的性能上,据专家分析,FreeBSD在网络性能、软件移植性和系统规范化上略胜一畴,而在硬件支持、磁盘IO操作等方面Linux略强一些。 5.什么是GNU软件,什么是GPL和LGPL? GUN项目主要由自由软件基金资助的一个项目,目标是开发一个自由的、UNIX类型的操作系统,称为GNU系统。GNU是―GNU’s Not UNIX‖的首字母的递归缩写,目前使用Linux内

安卓Android ROM定制、移植:第六篇:boot.img、recovery解包和打包

太抱歉了,因为教程实在是有点粗浅了,其实很多东西都不知道怎么去写,这不是复制粘贴,当然很多只是一步步的走的,不过也许我自己觉得已经阐述的很清楚了,可是一旦别人看起来,还是感觉很深奥,没办法,本人就这点能力了,呵呵! 大家都知道安卓的核心更换呢,那是在boot.img里面,那么如何在WINDOWS下去解开它呢,LINUX的自己略过。。。。 首先百度BOOTIMG.EXE,然后你懂的,会出来一大堆,这得感谢制作bootimg.exe的作者,本来是为华为的机器做的分解工具,不过我们也可以拿来分解boot.img、recovery.img等,OK!先来谈谈这两个文件的基础,部分来自网络。 boot和recovery映像的文件结构 boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk 内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。此类文件的定义可以从源代码android-src/system/core/mkbootimg找到一个叫做bootimg.h的文件。 (译者的话,原文是一个叫做mkbootimg.h的文件,但从Android 2.1的代码来看,该文件名应该是改为bootimg.h了)。 /* ** +-----------------+ ** | boot header | 1 page ** +-----------------+ ** | kernel | n pages ** +-----------------+ ** | ramdisk | m pages ** +-----------------+ ** | second stage | o pages ** +-----------------+

监控摄像机安装的详细流程教学提纲

监控摄像机安装的详 细流程

监控摄像机安装的详细流程与细节 监控摄像头的安装方法: 1) 在满足监视目标视场范围要求的条件下,其安装高度:室内离地不宜低于2.5m;室外离地不宜低于3.5m。 2) 监控摄像头及其配套装置,如镜头、防护罩、支架、雨刷等,安装应牢固,运转应灵活,应注意防破坏,并与周边环境相协调。 3) 在强电磁干扰环境下,监控摄像头安装应与地绝缘隔离。 4) 信号线和电源线应分别引入,外露部分用软管保护,并不影响云台的转动。 5) 电梯厢内的监控摄像头应安装在厢门上方的左或右侧,并能有效监视电梯厢内乘员面部特征。 云台、解码器安装: 1) 云台的安装应牢固,转动时无晃动。 2) 应根据产品技术条件和系统设计要求,检查云台的转动角度范围是否满足要求。 3) 解码器应安装在云台附近或吊顶内(但须留有检修孔)。 监控摄像头控制设备安装: 1) 控制台、机柜(架)安装位置应符合设计要求,安装应平稳牢固、便于操作维护。机柜架)背面、侧面离墙净距离应符合维修要求。 2)监控摄像头所有控制、显示、记录等终端设备的安装应平稳,便于操作。其中监视器(屏幕)应避免外来光直射,当不可避免时,应采取避

光措施。在控制台、机柜(架)内安装的设备应有通风散热措施,内部接插件与设备连接应牢*。 3) 控制室内所有线缆应根据设备安装位置设置电缆槽和进线孔,排列、捆扎整齐,编号,并有永久性标志。 监控工程施工常见问题 安防工程的专业施工及安装标准根据国家有关部门近年来颁发的安防设计、施工规范、规程和标准,在总结我公司几年来安防工程的设计和施工经验和基础上,结合安防科技发展的新技术、新产品的技术要求,本着服务社会、用户第一的宗旨,一、室内配线的技术室 安防工程的专业施工及安装标准 根据国家有关部门近年来颁发的安防设计、施工规范、规程和标准,在总结我公司几年来安防工程的设计和施工经验和基础上,结合安防科技发展的新技术、新产品的技术要求,本着服务社会、用户第一的宗旨, 一、室内配线的技术 室内配线不仅要求安全可*,而且要使线路布置合理、整齐,安装牢固。技术要求如下: 使用导线,其额定电压应大于线路的工作电压;导线的绝缘应符合线路的安装方式和敷设的环境条件。导线的截面积应能满足供电和机械强度的要求。 配线时应尽量避免导线有接头。除非用接头不可的,其接头必须采用压线或焊接。导线连接和分支处不应受机械力的作用。

嵌入式Linux系统移植试题

嵌入式Linux系统移植试题(时间:1个半小时) 一、选择题(每题2分,共50分,包括单选和多选,多选、少选均不得分) 1.嵌入式linux系统软件部分一般包括() [A] bootloader[B] linux内核[C] 根文件系统[D]用户应用程序 2.一般情况下,在搭建嵌入式linux开发环境时主机需要安装的软件有() [A] 串口通信软件[B] tftp服务器[C] nfs服务器[D]usb 3.下列选项中符合gcc的编译流程的是( ) [A] 预处理->编译->汇编->连接[B] 预处理->汇编->编译->连接[C] 编译->预处 理->汇编->连接[D预处理->连接->汇编->编译 4.gcc使用下列哪个选项可以查看编译的详细过程() [A] -o[B] -v [C] -E [D] -g 5.下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的() [A] size[B] as [C ] nm [D ] strip 6.下列二进制工具哪个是用来反汇编的() [A] nm[B] objdump [C ] objcopy [D ] string 7.下列二进制工具哪个是用来进行目标格式转换的() [A] nm[B] objdump [C ] objcopy [D ] string 8.下列二进制工具哪个是用来把程序地址转换为文件名和行号的() [A] nm[B] objdump [C ] objcopy [D ] addr2line 9.下列二进制工具哪个是用来将目标文件生成静态库的() [A] ar[B]nm [C ] objcopy [D ] objdump 10.FS2410开发板如果从nand flash启动,启动后()访问到nor flash;如果从nor flash 启动,启动后()访问nand flash。 [A] 可以[B] 不可以 11.SMDK2410开发平台上,linux要求bootloader将内核参数存储在什么位置() [A] 0x30008000 [B] 0x30000100 [C ] 0x30004000 [D ] 0x33f80000 12.SMDK2410开发平台上,linux要求bootloader将平台号保存在() [A] r0[B] r1 [C ] r2 [D ] r3 13.SMDK2410开发平台上,linux要求bootloader在运行内核前,让系统进入何种模式() [A] user[B] svc [C ] system 14.u-boot所支持的命令中,哪个是来设置环境变量的() [A] setenv [B] mm [C ] mtest [D ] bootm 15.u-boot支持的命令中,哪个是擦除nor flash的命令() [A] nand erase[B] protect [C ] erase [D ] cp 16.在内核配置时,哪个关键词是来包含下一级Kconfig( ) [A] menu endmenu[B] source [C ] choice endchoice [D ]depends on 17.内核启动过程中,如果终端出现”Error:a”错误,可能出现的原因是()

S3C6410 移植Android 内核移植经验

主要过程: . 安装lunux 环境 . 安装编译工具 . 下载Linux kernel . 安装Android SDK . 获得root file system . 修改Linux kernel 源码 . 配置Linux kernel . 修改root file system . 编译Linux kernel . 下载kernel Image 1.安装linux 环境 安装Ubuntu Linux 系统,从网站上下载操作系统安装光盘映像,地址: https://www.sodocs.net/doc/fc18684239.html,/ubuntu/releases/8.04/ 下载ubuntu-8.04.2-desktop-i386.iso,刻录成光盘安装,安装可以在windows 系统下进行, 选取有15G 空间的硬盘安装,输入用户密码开始安装 这一步结束退出光盘重启进入Ubuntu 系统,完成余下系统安装。 Linux 安装完成,进入Ubuntu 系统,确保电脑连接Internet,安装一些必要软件。 打开终端输入命令框,进行下面的操作: $ sudo apt-get install ssh $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

$ sudo apt-get install valgrind $ sudo apt-get install sun-java6-jdk $ sudo apt-get install libncurses5-dev 所有软件系统会自动从网络下载安装,完成后可以开始Android 的移植。 2.安装编译工具 下载: $ wget https://www.sodocs.net/doc/fc18684239.html,/public/gnu_toolchain/arm-none-linux-gnuea bi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 安装: $ tar -xjvf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 3.下载Linux kernel 从下面地址获得: https://www.sodocs.net/doc/fc18684239.html,/p/android/downloads/list?can=1&q=&colspec=File name Summary Uploaded Size DownloadCount Kernel : linux-2.6.23-android-m5-rc14.tar.gz 解压文件 $ tar -xf linux-2.6.23-android-m5-rc14.tar.gz 4.安装Android SDK 从网上下载linux 版本的Android SDK,如下 https://www.sodocs.net/doc/fc18684239.html,/android/android-sdk_m5-rc15_linux-x86.zip 下载后解压,获得android-sdk_m5-rc15_linux-x86 文件 5.获得root file system ⑴下载busybox 工具从下面地址 http://benno.id.au/blog/2007/11/14/android-busybox(linux 环境中下载)⑵运行emulator 获取root file system $ cd <目录>/ android-sdk_m5-rc15_linux-x86/tools $ ./emulator& 等待emulator 启动,看到出现Android 系统画面,进入菜单ALL/Dev Tools/Development Settings 下,将Wait for debugger,Show running processes,Show screen updates 这三项打勾,回到命令输入终端。 $ ./adb push /busybox /data $ ./adb shell # /data/busybox tar -czf system.tar.gz /system # /data/busybox tar -czf data.tar.gz /data # /data/busybox tar -czf etc.tar.gz /etc # /data/busybox tar -czf sbin.tar.gz /sbin # exit $ ./adb pull /system.tar.gz ./ $ ./adb pull /data.tar.gz ./

linux课后习题答案教材课后习题参考答案

第 1 章Linux 概况 一、选择题 1、下列哪个选项不是Linux 支持的? A. 多用户 B. 超进程 C. 可移植 D. 多进程 2、Linux 是所谓的“Free Software”,这个“Free”的含义是什么? A. Linux 不需要付费 B. Linux 发行商不能向用户收费 C. Linux 可自由修改和发布 D.只有Linux 的作者才能向用户收费 3、以下关于Linux 内核版本的说法,错误的是? A. 依次表示为主版本号.次版本号.修正次数的形式 B. 1.2.2 表示稳定的发行版 C. 2.2.6 表示对内核2.2 的第6 次修正 D. 1.3.2 表示稳定的发行版 4、以下哪个软件不是Linux 发行版本? A. 红旗 Server 4 B. Solaris 10 C. RedHat 9 D. Fedora 8 5、与Windows 相比Linux 在哪个方面相对应用得较少? A. 桌面 B. 嵌入式系统 C. 服务器 D. 集群 A6、Linux 系统各组成部分中哪一项是基础? A.内核 B. X Window C. Shell D. Gnome B7、Linux 内核管理不包括的子系统是哪个? A. 进程管理系统 B. 内存管理系统 C. 文件管理系统 D. 硬件管理系统 A8、下面关于Shell 的说法,不正确的是哪个? A. 操作系统的外壳 B. 用户与Linux 内核之间的接口 C. 一种和C 类似的高级程序设计语言 D. 一个命令语言解释器 B9、以下哪种Shell 类型在Linux 环境下不能使用? A.B Shell B.K Shel C.R Shell D.Bash 10、在Linux 中把声卡当作何种设备? A. 字符设备 B. 输出设备 C. 块设备 D. 网络设备 二、填空题 1、Linux 采用 LRU 算法(最近最少使用)算法,淘汰最近没有访问的

【IT专家】yolo模型移植到android手机端

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 yolo模型移植到android手机端 2017/08/18 665 之前写了android demo在手机上的运用,但是模型都是官方给的,想要替换成自己的模型,因此尝试了下将自己训练的yolo模型来替换demo给的模型。首先,darknet的训练和.weight文件到.pb文件的转化,以及android demo 的实现见之前的博客。在此不再叙述sdk,nkd等配置问题,且直接使用.pb文件。其次,默认已安装android studio。 (1)终端进入(android安装目录)/bin,输入./stuodio.sh开启android studio ?(2)点击new,import project导入(tensorflow所在路径)/tensorflow/examples/android文件夹(可连接手机先run,保证demo能够正常运行后再行修改) ?(3)将build.gradle中68行的bazelLocation改为自己bazel的路径:def bazelLocation = ‘/home/seven/bin/bazel’185行apply from: “download-models.gradle”注释掉,并在第112行,增加//*/(不然后面的内容都被当做注释了): ?if (nativeBuildSystem == ‘bazel’ || nativeBuildSystem == ‘makefile’) { // TensorFlow Java API sources. java { srcDir ‘../../java/src/main/java’ exclude ‘**/examples/**’//*/ } // Android TensorFlow wrappers, etc. java { 最后,将第76行开始的内容改为自己需要的版本号: android { compileSdkVersion 25 buildToolsVersion “26.0.1” if (nativeBuildSystem == ‘cmake’) { defaultConfig { applicationId = ‘org.tensorflow.demo’ minSdkVersion 21 targetSdkVersion 25 ndk { abiFilters “${cpuType}” } (4)将转化得到的.pb文件放在(tensorflow所在路径)/tensorflow/examples/android/assets文件夹内,为方便起见,可将此.pb重命名为graph-tiny-yolo-voc.pb。若文件夹中已存在此文件名的文件,删除之。 ?(5)该项目将一次性生成三个app,因为我只需要detect一个,在AndroidManifest.xml中删除关于另外的两个activity,修改后的文件如图 ?

摄像头是如何做出来的

看——摄像头是如何做出来的! 市场上一般主流的摄像头都在一百多元左右,基本上都归成外设耗材类产品。很多人去买摄像头的时候,都以为没有什么技术含量,没有什么工艺要求,买个鼠标键盘还要看看手感,买摄像头就不太在意了,所以造成很多生产摄像头的厂商大量制造品质低劣的产品,有无牌无厂的,有大品牌去找小厂OEM的,鱼龙混杂,这些摄像头“厂家”基本上有三个类型: 一、纯加工厂,这类厂家无开发能力,到市场上买一些外壳(俗称:模具),买已经设计好的公版PCB,就进行手工贴片和组装。专门接单,赚的是加工费,有时也随便贴个牌子,以低价或抛单的形式来渠道上出现。 二、品牌运营商和兼营商,这类商家具有很强的渠道推广的能力,品牌也有较好的知名度,摄像头产品主要是从纯加工厂里买来,也叫OEM。虽然有品牌,但外观长得都差不多一个样,产品同质化严重。 三、综合化厂家,拥有有从外观设计、电路开发、软件和驱动研发、生产、销售的综合企业,这类厂家在最所投入的精力最大,产品也较具特色,能较好的把握市场和消费者的需求,不断开发新的产品推向市场。 笔者近来就去一家综合化的摄像头开发生产厂家全程参观了J-CAM的全套生产过程。从外观设计,PCB电路板设计、精密模具设计制造、注塑成形、无尘车间喷油、电路板SMT高速贴片、插件、装配、检测、包装。

(接下来,介绍的就是此款摄像头的制造流程) 出色的摄像头不仅需要有出色的效果,同样,也要有吸引人的外观。成功的外观设计,需要出色的设计理念,但要把将这理念在具体实物体现出来,又需要精湛的工艺。 设计篇 一、外观设计 据天敏工业设计小组介绍,摄像头前期设计的工作也很复杂。 一个新的摄像头的诞生,最初由设计师的灵感而成,设计师首先用手画草图,将自己的的想法粗略地在纸上体现,画出简易的大体外观。 (天敏子弹头的设计草图) 在ID小组讨论后决定后,用Rhino犀牛工业造型软件先画几个三维的外观效果图,经讨论大致确认后,把这个粗略的外观图纸文件送去打版中心进行CNC三维雕刻打“手版”,然后对实体模型进行评审,然后会根据模型计师进行不断的修改,这个过程是要将摄像头的最后所要实现的外观确认。外观打样后,即进行结构论证和设计工作,一般使用“PRO-E”软件,结构设计。 在设计底座时,就打了很多个样版。设计师根据市场的调研,发现现大多数的摄像头的底座都

Linux系统移植步骤

Linux系统移植步骤 Linux系统移植步骤 arm9 S3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。 S3C2410微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于arm920T核的微处理器。它带有内存管理单元(MMU),采用0.18mm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。 在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛[1]。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。 与Linux2.4内核相比,2.6内核吸收了最新的技术,在性能、可测量性、器件支持和可用性方面有了大幅度提高;支持更多的体系结构、处理器、总线、接口和设备;标准化了内部接口;简化了扩展或添加新设备的步骤等。 本文着重介绍如何制作一个基于linux-2.6.19内核的小型Linux操作系统,并将它移植到S3C2410开放板上。内容包括交叉编译环境的

建立,引导程序、2.6.19内核、根文件系统的修改、配置、编译、移植等。 系统的制作移植 建立交叉编译环境 要移植、开发小型Linux系统,首先要在安装了RedHat9或更高版本Linux操作系统的主机上配置交叉开发环境。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。 针对本次开发,需要安装arm-linux-gcc-3.4.1以及armv4l-tools工具链。在安装完毕后,切记要将两者的路径分别添加到系统路径$PATH 中。 引导程序 对于计算机系统来说,从开机上电到操作系统启动需要一个引导程序。嵌入式linux系统同样离不开引导程序,这个引导程序叫做Bootloader[1]。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内核做好准备。 vivi[4]是韩国MIZI公司为其arm9系列产品而研发的Bootloader,小而灵巧,这里选用它作为小型Linux系统的Bootloader。 首先要修改vivi源代码中的Flash分区信息,新的分区信息如表1所示。 根据表1,在vivi源码arch/s3c2410/smdk.c文件中作出相应的修

Android_ROM制作移植及精简教程

Android_ROM制作,精简及移植教程 本教程主要内容有:Android系统文件夹结构解析、应用软件说明、定制精简、ROM签名把包等内容。刷机有风险,出问题自负。其实这个教程一早就想写的,但由于时间及本人的懒惰,一直拖着。今晚终于静下心来写好本文,本文有部份内容来自于网络。 速度与华丽,你喜欢那个。是不是想要一个又够速度又华丽的ROM呢?我是一个追求新鲜的人,对于手机的ROM,我又追求稳定、精简、美观、省电。现在Hero ROM有很多,最新的有第三方Android 2.1版本,但这些ROM的制作者都会跟据自已的个人喜欢会增加和增少相应的功能或是界面,但我们往往不喜欢这些ROM的某些小方面,所以随着而来面对的问题就是怎样把这个ROM修改成为一个自已真正需要的ROM呢?以往一直是依靠“大杀器”来解决,但觉得还是过于麻烦,所以寻求办法自己动手修改ROM。于是有了本文。废话少说,进入题。 一、Android系统文件夹结构 一个完整的ROM根目录会有以下几个文件夹及文件: data META-IN system boot.img 系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 /system/app/*.apk 2)用户安装应用程序所在目录 /data/app/*.apk 3) 注意: a)在模拟器中,每重启一次,/system/app/下的应用都会被还原,有时/data/app下也会被清除 b)若在/system/app和/data/app下有重名的应用,不一定会启动哪一个,尤其是在adb install杀死正在运行的程序时,有时旧的就会被启动 2.用户数据所在目录 /data/data/应用包名/shared_prefs 配置文件 /data/data/应用包名/databases/* 库文件所在目录 3. SD卡对应目录 /sdcard/

手机摄像头模组生产工艺的SMT流程及SMT应用分析(1).

手机摄像头模组生产工艺的SMT流程及SMT应用分析 摘要 随着通信技术的不断扩延,手机已成为人们生活、工作、学习、娱乐不可或缺的工具。而手机摄像头模组是手机中非常重要的组件之一,其品质的好坏直接影响手机整体品质的高低。因此在手机摄像头模组生产的过程中每一步都是要严格把关的,不能有丝毫的懈怠。在手机摄像头模组中,FPC软电路板是决定手机照相生成图片的关键组件之一,因此它的生产工艺及质量好坏显得尤为重要。 基于此,首先简单介绍了手机摄像头模组原理以及SMT技术在手机摄像头模组生产工艺中的应用,着重阐述了手机摄像头模组FPC软电路板的改良设计和SMT生产工艺流程及产品质量分析。根据手机摄像头模组FPC软电路板的具体要求,合理进行SMT技术指标优化,分析研究了手机摄像头模组再流焊SMT焊接温度分布曲线。针对FPC软电路板产品设置了AIO(automatic optical inspection)检测及ICT在线测试方法。 关键字:手机摄像头模组 SMT AIO检测 ICT在线测试

Mobile phone camera module production technology of SMT processes and SMT application ABSTRACT Summary as communication technologies continues expansion, mobile phone has become the people's life, work, learn, play an indispensable tool. Mobile phone camera module is one of the very important components in the mobile phone, its quality directly affect the overall level of quality phones. In the mobile phone camera module production at every step in the process is to strictly, there can be no slack. Mobile phone camera module in the FPC flexible circuit board is to determine the key components of the camera phone picture, therefore its production process and the quality is particularly important. Based on this, the first simply introduced the mobile phone camera module principle and SMT technology and its application in mobile phone camera module production, focusing on mobile phone camera module is described FPC flexible circuit board design and analysis of SMT production process and product quality. According to mobile phone camera module FPC flexible circuit board requirements, reasonable SMT technical specifications, analysis of mobile phone camera module for reflow SMT soldering temperature distribution curves.FPC flexible circuit board set AIO products (automatic optical inspection) test online test methods and ICT. Keyword: mobile phone camera module;SMT;AIO ICT;on-line test

相关主题