linux_内核移植方法及错误

linux_内核移植方法及错误
linux_内核移植方法及错误

出现问题:

## Starting application at 0x30008000 ...

Uncompressing Linux.............................................................

解决方案:

setenv bootargs console=ttySAC0,115200 mem=64M ;console明令在哪暂时还没解决??? setenv

TCP cubic registered

NET: Registered protocol family 1

NET: Registered protocol family 17

Root-NFS: No NFS server available, giving up.

VFS: Unable to mount root fs via NFS, trying floppy.

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

Please append a correct "root=" boot option

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

解决方法:把

08.05.11、<*> RAM disk support

09.27.07、<*> Compressed ROM file system support (cramfs)

1. 问题一

下载内核到flash中,运行到如下即停止没有下文:

Uncompressing Linux……………………done,booting the kernel

卡在这里不动了

原因分析:可能是内核的启动参数传递时没有填写正确,

也可能是在linux内核中没对flash分区,

还有另一可能原因是在内核编译配置时没将串口驱动勾选。

解决办法:

如果是命令参数问题,则作如下修改:注释掉arch/arm/kernel/setup.c文件中的parse_tag_cmdline()函数中的strlcpy()函数,这样就可以使用默认的CONFIG_CMDLINE了,在.config文件中它被定义为"root=/dev/mtdblock2 ro init=/linuxrc console=ttySAC0,115200"(视具体情况而定),在内核配置文件的Boot options中填入也可。

如果是内核NAND flash分区的问题,则作如下修改:

1. 1 修改文件arch/arm/mach-s3c2410/devs.c,添加如下信息:#include

#include

#include

static struct mtd_partition partition_info[]=

{

{

name:"bootloader",

size:0x00040000,

offset:0,

},

{

name:"kernel",

size:0x001c0000,

offset:0x00040000,

},

{

name:"rootfs",

size: 0x01e00000,

offset:0x00200000,

},

{

name:"ext-fs1",

size: 0x01000000,

offset:0x02000000,

},

{

name:"ext-fs2",

size: 0x01000000,

offset:0x03000000,

},

};

//以上分区和NAND flash物理分区一样,分区不一样没试过,根据自己板子情况而定struct s3c2410_nand_set nandset=

{

nr_partitions:5,

partitions:partition_info,

};

struct s3c2410_platform_nand s3c_nand_info=

{

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};

以上分区和NAND flash物理分区一样,分区不一样没试过,根据自己板子情况而定struct s3c2410_nand_set nandset=

{

nr_partitions:5,

partitions:partition_info,

};

struct s3c2410_platform_nand s3c_nand_info=

{

tacls:0,

twrph0:30,

twrph1:0,

sets:&nandset,

nr_sets:1,

};

struct platform_device s3c_device_nand={

.name="s3c2410-nand",

.id = -1,

.num_resources = ARRAY_SIZE(s3c_nand_resources),

.resource = s3c_nand_resource, /*黑体为新加内容*/

.dev = {

.platform_data=&s3c_nand_info

}

};

1.2 在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加&s3c_device_nand,如下所示:static struct platform_device * smdk2410_device[] _initdata=

{

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

&s3c_device_nand,

};

配置好以上内容后重新编译内核即可。

如果是串口驱动没有勾选,则一定记住将勾上如下选项:

Character devices

-> Serial Drivers下的项勾上.

2. 出现如下错误:VFS:Cannot open root device "mtdblock/2" or unknown-block(0,0)

Please append a correct "root=" boot option.

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

原因分析:出现这种情况一般有两种情况:没有文件系统或boot options参数不正确,如我的系统文件系统为cramfs格式,存放文件系统的分区为第三个分区,启动参数为:

"noinitrd root=/dev/mtdblock2 ro init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs mem=64M"

其中文件系统使用busybox-1.10.1制作

重新编译即可。

3. 系统启动后出现如下错误:

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

或者类似的错误。

原因分析:我在这里耗了大量的时间,这种情况一般是NAND flash分区未能分正确,或者所在的分区上没有文件系统,当启动中出现类似如下信息时表明分区正确了

Scanning device for bad blocks

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

0x00000000-0x00040000 : "boot"

mtd: Giving out device 0 to boot

0x00040000-0x00200000 : "kernel"

mtd: Giving out device 1 to kernel

0x00200000-0x02000000 : "rootfs"

mtd: Giving out device 2 to rootfs

0x02000000-0x03000000 : "ext-fs1"

mtd: Giving out device 3 to ext-fs1

0x03000000-0x04000000 : "ext-fs2"

mtd: Giving out device 4 to ext-fs2

从上面看出我的文件系统放在第三个分区rootfs上,其设备号为2,启动后文件系统能挂上,如下所示

Reading data from NAND FLASH without ECC is not recommended

the error code is:0,name=/dev/root,fs=cramfs,flags=32769

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 104K

Reading data from NAND FLASH without ECC is not recommended

init started: BusyBox v1.10.1 (2008-04-23 23:20:41 CST)

starting pid 229, tty '': '/etc/init.d/rcS'

Reading data from NAND FLASH without ECC is not recommended

the error code is:0,name=/dev/root,fs=cramfs,flags=32769

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 104K

Reading data from NAND FLASH without ECC is not recommended

init started: BusyBox v1.10.1 (2008-04-23 23:20:41 CST)

starting pid 229, tty '': '/etc/init.d/rcS'

Please press Enter to activate this console.

4. 系统启动到到如下语句即停止不前,停在那里:

VFS:Mounted root (cramfs filesystem) readonly.

Freeing init memory:104

卡在这里没有下文

原因分析:系统在启用init函数时有这么一句,粗体所示

static int init(void * unused)

{

if(execute_command)

{

run_init_process(execute_command);

}

………………

在这句里面出错就会没有下文

解决办法:在配置内核时少选了几句,将如下选择全选上

Floating Point emulation

->At least one emulation must be selected:

NWFPE math emulation

Support extended precision

FastFPE math emulation(EXPERIMENTAL)

5. 关于文件系统问题:在有些资料上提到在配置内核时选上devfs,如果不存在时则手动在文件里加上。但我在内核里面和busybox-1.10.1中都未加devfs支持,文件系统运行正常。在linux-2.

6.14.1及以后版本中已去掉devfs。

6. linux-2.6.15.4这个版本也能成功在s3c2410上运行.

内核编译成功后,启动后出现如下提示后就停住了。。。。。。矩阵通信网-通信.IT人的精神家园n4} I? Q R { ` t7s J

Freeing init memory: 72K 矩阵通信网-通信.IT人的精神家园%E q"w-?0~;{8r T m Warning: unable to open an initial console.矩阵通信网-通信.IT人的精神家园8`9P j q&_/N

!C+Q7f W ] [0这个也是控制台console的问题,linux-2.6.13以后的内核都支持devfs,而之后版本的内核就把devfs这块去掉了,虽然还能在内核源码中找到对应的源码,你也可以把它加进内核,但是也不是太好用。2.6.13 后的版本改为支持udev了,udev这块我也没太弄懂,正在研究。-

--> Kernel Features

--> Preemption Mode

.config 里面的CONFIG_PREEMPT_NONE 选项决定了kernel在挂在文件系统后可不能进入shell。

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

--> Floating point emulation

FPE_NWFPE 选项如果未选上

现象:

…………

IPv4 over IPv4 tunneling driver

TCP bic registered

NET: Registered protocol family 1

IP-Config: No network devices available.

RAMDISK: ext2 filesystem found at block 0

RAMDISK: Loading 4196KiB [1 disk] into ram disk... done.

EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended

VFS: Mounted root (ext2 filesystem).

Freeing init memory: 96K

kernel 启动到这里就停止了。

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

--> Device Drivers

--> Block devices

CONFIG_BLK_DEV_RAM选项未选上

CONFIG_BLK_DEV_INITRD选项未选上

现象:

………………

loop: loaded (max 8 devices)

nbd: registered device at major 43

mice: PS/2 mouse device common for all mice

IPv4 over IPv4 tunneling driver

TCP bic registered

NET: Registered protocol family 1

IP-Config: No network devices available.

Root-NFS: No NFS server available, giving up.

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "ram0" or unknown-block(2,0)

Please append a correct "root=" boot option

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

1. 加载kernel后出现如下错误:

NET: Registered protocol family 1

Root-NFS: No NFS server available, giving up.

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "mtdblock3" or unknown-block(2,0)

Please append a correct "root=" boot option

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

其中,linux command line is: "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySA C0,115200"

解决方法,在make menuconfig 后,选中mtd支持,cramfs支持,/dev fs支持。

其中,添加/dev fs支持具体操作如下:

修改fs/Kconfig,支持启动时挂载devfs

$vim fs/ Kconfig

找到menu “Pseudo filesystem”

在其中添加:

config DEVFS_FS

bool “/dev file system support (OBSOLETE)”

default y

config DEVFS_MOUNT

bool “Automatically mount at boot”

default y

depends on DEVFS_FS

之后,boot信息如下:

boot

Copy linux kernel from 0x00030000 to 0x30008000, size = 0x00100000 ... done zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttySAC0,1 15200"

MACH_TYPE = 193

NOW, Booting Linux......

Uncompressing Linux................................................................... done, booting the ker nel.

Linux version 2.6.15.4 (zjw@zjw.linux) (gcc version 4.1.1) #5 Thu Aug 2 20:47:27 CST 2007

CPU: ARM920Tid(wb) [41129200] revision 0 (ARMv4T)

Machine: SMDK2410

ATAG_INITRD is deprecated; please update your bootloader.

Memory policy: ECC disabled, Data cache writeback

CPU S3C2410A (id 0x32410002)

S3C2410: core 200.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz

S3C2410 Clocks, (c) 2004 Simtec Electronics

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

CPU0: D VIVT write-back cache

CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

Built 1 zonelists

Kernel command line: noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttySAC0,115 200

irq: clearing subpending status 00000007

irq: clearing subpending status 00000002

PID hash table entries: 256 (order: 8, 4096 bytes)

timer tcon=00000000, tcnt a2c1, tcfg 00000200,00000000, usec 00001eb8 Console: colour dummy device 80x30

Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Memory: 32MB = 32MB total

Memory: 30248KB available (1676K code, 376K data, 88K init)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

S3C2410: Initialising architecture

S3C2410 DMA Driver, (c) 2003-2004 Simtec Electronics

DMA channel 0 at c2800000, irq 33

DMA channel 1 at c2800040, irq 34

DMA channel 2 at c2800080, irq 35

DMA channel 3 at c28000c0, irq 36

NetWinder Floating Point Emulator V0.97 (extended precision)

devfs: 2004-01-31 Richard Gooch (rgooch@atnf.csiro.au)

devfs: devfs_debug: 0x0 //可以看出,已经支持devfs

devfs: boot_options: 0x1

io scheduler noop registered

io scheduler anticipatory registered

io scheduler deadline registered

io scheduler cfq registered

Console: switching to colour frame buffer device 80x25

fb0: Virtual frame buffer device, using 1024K of video memory

s3c2410-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410

s3c2410-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410

s3c2410-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410 RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c2410-nand: Tacls=1, 10ns Twrph0=4 40ns, Twrph1=1 10ns

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

NAND_ECC_NONE selected by board driver. This is not recommended !!

Scanning device for bad blocks

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

0x00000000-0x00020000 : "loader"

0x00020000-0x00030000 : "param"

0x00030000-0x001f0000 : "kernel"

0x00200000-0x00600000 : "root"

0x00600000-0x04000000 : "user"

mtd: partition "user" extends beyond the end of device "NAND 32MiB 3,3V 8-bit" --size truncated to 0x1a00000

mice: PS/2 mouse device common for all mice

NET: Registered protocol family 2

IP route cache hash table entries: 512 (order: -1, 2048 bytes)

TCP established hash table entries: 2048 (order: 1, 8192 bytes)

TCP bind hash table entries: 2048 (order: 1, 8192 bytes)

TCP: Hash tables configured (established 2048 bind 2048)

TCP reno registered

TCP bic registered

NET: Registered protocol family 1

Root-NFS: No NFS server available, giving up.

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "mtdblock/3" or unknown-block(2,0)

Please append a correct "root=" boot option

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

根据网上的一些指导,将linux_cmd_line设置为"noinitrd root=/dev/mtdblock/3 init=/li nuxrc console=ttySAC0,115200",问题

依旧。尝试了几乎所有网上的办法,问题没有得到解决。于是尝试换一个内核,下载了2.6. 22的内核,按照2.6.15.4一样

配置编译了内核,当然,该版本的移植步骤有点变化,最主要的区别是,2.6.22的内核已经没有了/arch/arm/mach-s3c2410/dev.c文件,

所以,分区信息要在arch/arm/mach-s3c2410/common-smdk.c中修改static struct mtd_p artition smdk_default_nand_part[] 。

boot后:

boot

Copy linux kernel from 0x00030000 to 0x30008000, size = 0x001d0000 ... done zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,11 5200"

MACH_TYPE = 193

NOW, Booting Linux......

Uncompressing Linux.................................................................................................. don e, booting the kernel.

Linux version 2.6.22 (zjw@zjw.linux) (gcc version 4.1.1) #3 Sun Aug 5 16:00:32 CS T 2007

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

Machine: SMDK2410

ATAG_INITRD is deprecated; please update your bootloader.

Memory policy: ECC disabled, Data cache writeback

CPU S3C2410A (id 0x32410002)

S3C2410: core 200.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz

S3C24XX Clocks, (c) 2004 Simtec Electronics

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

CPU0: D VIVT write-back cache

CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

Built 1 zonelists. Total pages: 8128

Kernel command line: noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115 200

irq: clearing subpending status 00000007

irq: clearing subpending status 00000002

PID hash table entries: 128 (order: 7, 512 bytes)

timer tcon=00000000, tcnt a2c1, tcfg 00000200,00000000, usec 00001eb8 Console: colour dummy device 80x30

Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

Memory: 32MB = 32MB total

Memory: 29224KB available (2780K code, 309K data, 132K init)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

S3C2410 Power Management, (c) 2004 Simtec Electronics

S3C2410: Initialising architecture

S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics

DMA channel 0 at c2800000, irq 33

DMA channel 1 at c2800040, irq 34

DMA channel 2 at c2800080, irq 35

DMA channel 3 at c28000c0, irq 36

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 1024 (order: 1, 8192 bytes)

TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

TCP: Hash tables configured (established 1024 bind 1024)

TCP reno registered

NetWinder Floating Point Emulator V0.97 (double precision)

JFFS2 version 2.2. (NAND) ?? 2001-2006 Red Hat, Inc.

io scheduler noop registered

io scheduler anticipatory registered (default)

io scheduler deadline registered

io scheduler cfq registered

s3c2410-lcd s3c2410-lcd: no platform data for lcd, cannot attach

s3c2410-lcd: probe of s3c2410-lcd failed with error -22

lp: driver loaded but no devices found

ppdev: user-space parallel port driver

S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics

Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled

s3c2410-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410

s3c2410-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410

s3c2410-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410 RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize

loop: module loaded

dm9000 Ethernet Driver

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2

ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx BAST NOR-Flash Driver, (c) 2004 Simtec Electronics

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c2410-nand s3c2410-nand: Tacls=1, 10ns Twrph0=4 40ns, Twrph1=1 10ns NAND device: Manufacturer ID: 0xec, Chip ID: 0x75 (Samsung NAND 32MiB 3,3V 8-bit)

NAND_ECC_NONE selected by board driver. This is not recommended !! Scanning device for bad blocks

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

0x00000000-0x00020000 : "loader"

0x00020000-0x00030000 : "param"

0x00030000-0x00200000 : "kernel"

0x00200000-0x00600000 : "root"

0x00600000-0x02000000 : "user"

usbmon: debugfs is not available

s3c2410-ohci s3c2410-ohci: S3C24XX OHCI

s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1

s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000

usb usb1: configuration #1 chosen from 1 choice

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 ports detected

mice: PS/2 mouse device common for all mice

S3C24XX RTC, (c) 2004,2006 Simtec Electronics

s3c2410-i2c s3c2410-i2c: slave address 0x10

s3c2410-i2c s3c2410-i2c: bus frequency set to 390 KHz

s3c2410-i2c s3c2410-i2c: i2c-0: S3C I2C adapter

TCP cubic registered

NET: Registered protocol family 1

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 132K

Warning: unable to open an initial console.

Failed to execute /linuxrc. Attempting defaults...

看来,mtdblock3已经能认出来了,不知道上个问题是不是2.6.15.4内核本身的问题。现在的问题,好像是cramfs文件系统有问题了。

也可以理解,我下载的是在2.4内核下能成功加载的文件系统,到2.6下可能不行,看来要重新制作文件系统了。

下载了1.6.1版本的buzybox,修改了makefile的arch和CROSS_COMPILER,make menuconfig,选了一些自认为需要的选项。当我选了静态编译后,编译出错,所以最后选的是动态加载,这样的话就要在编译后的添加的lib目录中将交叉编译工具的一些lib拷贝进去了。

make install 后,生成了bin, sbin ,usr三个目录,然后

mkdir mnt root var tmp proc boot etc lib

mkdir /var/{lock,log,mail,run,spool},然后mkcramfs,生成.cramfs文件,下载,boot,问题依旧,

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 132K

Warning: unable to open an initial console.

Failed to execute /linuxrc. Attempting defaults...

后来发现busybox生成的文件系统根目录下并没有linuxrc,所以无从执行,于是网上搜索了一下,自己编辑了一个linuxrc脚本,属性改为可执行,内容如下:

#!/bin/sh

echo "mount /etc as ramfs"

/bin/mount -n -t ramfs ramfs /etc

/bin/cp -a /mnt/etc/* /etc

echo "re-create the /etc/mtab entries"

/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /

/bin/mount -f -t ramfs ramfs /etc

exec /sbin/init

重新压缩下载,boot,问题依旧,真是郁闷。仔细分析了启动信息,发现虽然同样在fs/ kconfig中添加了devfs的信息并且在内核编译选项中选中了

相应的内容,但是启动信息中并没有体现出来,所以怀疑devfs驱动没有加载,查看了内核的源代码,发现devfs相关的代码已经完全被删除了,看来

linux确实要和devfs断绝关系了,试着将devfs的代码拷回去,编译错误一大堆,估计要移植过去有点工作量,既然说它不好,那我也不必一定要用它

了,强扭的瓜也不甜,所以准备使用udev。

busybox中有一个裁减的udev --〉mdev命令!选上它,又选择了一些其它的命令,重新make install busybox。发现根目录下有了linuxrc文件了!!

不是很确定到底是添加了哪些选项后出来的,也不想去试验了。赶快打包,下载,boot后,终于:

Copy linux kernel from 0x00030000 to 0x30008000, size = 0x001d0000 ... done zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,11

5200"

MACH_TYPE = 193

NOW, Booting Linux......

Uncompressing Linux.................................................................................................. don e, booting the kernel.

Linux version 2.6.22 (zjw@zjw.linux) (gcc version 4.1.1) #3 Sun Aug 5 16:00:32 CS T 2007

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

Machine: SMDK2410

ATAG_INITRD is deprecated; please update your bootloader.

Memory policy: ECC disabled, Data cache writeback

CPU S3C2410A (id 0x32410002)

S3C2410: core 200.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz

S3C24XX Clocks, (c) 2004 Simtec Electronics

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

CPU0: D VIVT write-back cache

CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets

Built 1 zonelists. Total pages: 8128

Kernel command line: noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115 200

irq: clearing subpending status 00000007

irq: clearing subpending status 00000002

PID hash table entries: 128 (order: 7, 512 bytes)

timer tcon=00000000, tcnt a2c1, tcfg 00000200,00000000, usec 00001eb8 Console: colour dummy device 80x30

Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

Memory: 32MB = 32MB total

Memory: 29224KB available (2780K code, 309K data, 132K init)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

S3C2410 Power Management, (c) 2004 Simtec Electronics

S3C2410: Initialising architecture

S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics

DMA channel 0 at c2800000, irq 33

DMA channel 1 at c2800040, irq 34

DMA channel 2 at c2800080, irq 35

DMA channel 3 at c28000c0, irq 36

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 1024 (order: 1, 8192 bytes)

TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

TCP: Hash tables configured (established 1024 bind 1024)

TCP reno registered

NetWinder Floating Point Emulator V0.97 (double precision)

JFFS2 version 2.2. (NAND) ?? 2001-2006 Red Hat, Inc.

io scheduler noop registered

io scheduler anticipatory registered (default)

io scheduler deadline registered

io scheduler cfq registered

s3c2410-lcd s3c2410-lcd: no platform data for lcd, cannot attach

s3c2410-lcd: probe of s3c2410-lcd failed with error -22

lp: driver loaded but no devices found

ppdev: user-space parallel port driver

S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics

Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled

s3c2410-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410

s3c2410-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410

s3c2410-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410 RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize

loop: module loaded

dm9000 Ethernet Driver

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2

ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx BAST NOR-Flash Driver, (c) 2004 Simtec Electronics

S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c2410-nand s3c2410-nand: Tacls=1, 10ns Twrph0=4 40ns, Twrph1=1 10ns NAND device: Manufacturer ID: 0xec, Chip ID: 0x75 (Samsung NAND 32MiB 3,3V 8-bit)

NAND_ECC_NONE selected by board driver. This is not recommended !! Scanning device for bad blocks

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

0x00000000-0x00020000 : "loader"

0x00020000-0x00030000 : "param"

0x00030000-0x00200000 : "kernel"

0x00200000-0x00600000 : "root"

0x00600000-0x02000000 : "user"

usbmon: debugfs is not available

s3c2410-ohci s3c2410-ohci: S3C24XX OHCI

s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1 s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000

usb usb1: configuration #1 chosen from 1 choice

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 2 ports detected

mice: PS/2 mouse device common for all mice

S3C24XX RTC, (c) 2004,2006 Simtec Electronics

s3c2410-i2c s3c2410-i2c: slave address 0x10

s3c2410-i2c s3c2410-i2c: bus frequency set to 390 KHz

s3c2410-i2c s3c2410-i2c: i2c-0: S3C I2C adapter

TCP cubic registered

NET: Registered protocol family 1

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 132K

init started: BusyBox v1.6.1 (2007-08-04 22:24:34 CST) multi-call binary starting pid 739, tty '': '/etc/init.d/rcS'

Cannot run '/etc/init.d/rcS': No such file or directory

starting pid 740, tty '': '/bin/sh'

Cannot run '/bin/sh': No such file or directory

process '-/bin/sh' (pid 740) exited. Scheduling it for restart.

starting pid 741, tty '': '/bin/sh'

Cannot run '/bin/sh': No such file or directory

process '-/bin/sh' (pid 741) exited. Scheduling it for restart.

starting pid 742, tty '': '/bin/sh'

Linux内核修改与编译图文教程

Linux 内核修改与编译图文教程 1

1、实验目的 针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。 2、任务概述 2.1 下载新内核 https://www.360docs.net/doc/6117110752.html,/ 2.2 修改新内核系统调用 添加新的系统调用函数,用来判断输入数据的奇偶性。 2.3 进行新内核编译 通过修改新版内核后,进行加载编译。最后通过编写测试程序进行测试 3、实验步骤 3.1 准备工作 查看系统先前内核版本: (终端下)使用命令:uname -r 2

3.2 下载最新内核 我这里使用的内核版本是 3.3 解压新版内核 将新版内核复制到“/usr/src”目录下 在终端下用命令:cd /usr/src进入到该文件目录 解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令: bzip2 -d linux-2.6.36.tar.bz2 tar -xvf linux-2.6.36.tar 文件将解压到/usr/src/linux目录中 3

使用命令: ln -s linux-2.6.36 linux 在终端下输入一下命令: sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt 4

实验四Linux内核移植实验

合肥学院 嵌入式系统设计实验报告 (2013- 2014第二学期) 专业: 实验项目:实验四 Linux内核移植实验 实验时间: 2014 年 5 月 12 实验成员: _____ 指导老师:干开峰 电子信息与电气工程系 2014年4月制

一、实验目的 1、熟悉嵌入式Linux的内核相关代码分布情况。 2、掌握Linux内核移植过程。 3、学会编译和测试Linux内核。 二、实验内容 本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。 三、实验步骤 1、使用光盘自带源码默认配置Linux内核 ⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。 输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。 ⑵执行以下命令来使用缺省配置文件config_x35 输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config ) 然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示: 解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。 ⑶配置内核界面,不用做任何更改,在主菜单里选择退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。 编译内核: #make clean #make zImage 在执行#make zImage命令时会出现如下错误: 错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通过网上查找资料 于是在自己的mach-mini2440.c中加入 #include

如何自行编译一个Linux内核的详细资料概述

如何自行编译一个Linux内核的详细资料概述 曾经有一段时间,升级Linux 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 apt 这样的包管理器来处理。通过添加特定的仓库,你能很轻易地安装实验版本的或者指定版本的内核(比如针对音频产品的实时内核)。 考虑一下,既然升级内核如此容易,为什么你不愿意自行编译一个呢?这里列举一些可能的原因: 你想要简单了解编译内核的过程 你需要启用或者禁用内核中特定的选项,因为它们没有出现在标准选项里 你想要启用标准内核中可能没有添加的硬件支持 你使用的发行版需要你编译内核 你是一个学生,而编译内核是你的任务 不管出于什么原因,懂得如何编译内核是非常有用的,而且可以被视作一个通行权。当我第一次编译一个新的Linux 内核(那是很久以前了),然后尝试从它启动,我从中(系统马上就崩溃了,然后不断地尝试和失败)感受到一种特定的兴奋。 既然这样,让我们来实验一下编译内核的过程。我将使用Ubuntu 16.04 Server 来进行演示。在运行了一次常规的 sudo apt upgrade 之后,当前安装的内核版本是 4.4.0-121。我想要升级内核版本到 4.17,让我们小心地开始吧。 有一个警告:强烈建议你在虚拟机里实验这个过程。基于虚拟机,你总能创建一个快照,然后轻松地从任何问题中回退出来。不要在产品机器上使用这种方式升级内核,除非你知道你在做什么。 下载内核 我们要做的第一件事是下载内核源码。在 Kernel 找到你要下载的所需内核的URL。找到URL 之后,使用如下命令(我以 4.17 RC2 内核为例)来下载源码文件: wget https://git.kernel/torvalds/t/linux-4.17-rc2.tar.gz

linux操作系统内核实验报告

linux操作系统内核实验报告 篇一:linux操作系统实验报告 LINUX操作系统实验报告 姓名班级学号指导教师 XX 年 05月 16 日 实验一在LINUX下获取帮助、Shell实用功能实验目的: 1、掌握字符界面下关机及重启的命令。 2、掌握LINUX下获取帮助信息的命令:man、help。 3、掌握LINUX中Shell的实用功能,命令行自动补全,命令历史记录,命令的排列、替 换与别名,管道及输入输出重定向。 实验内容: 1、使用shutdown命令设定在30分钟之后关闭计算机。 2、使用命令“cat /etc/cron.daliy”设置为别名named,然后再取消别名。 3、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用追加重定向输入内容为word。 4、使用管道方式分页显示/var目录下的内容。 5、使用cat显示文件/etc/passwd和/etc/shadow,只有正确显示第一个文件时才显示第二个文件。 实验步骤及结果:

1. 用shutdown命令安全关闭系统,先开机在图形界面中右击鼠标选中新建终端选项中输入 命令 Shutdown -h 30 2、使用命令alias将/etc/cron.daliy文件设置为别名named,左边是要设置的名称右边是要更改的文件。查看目录下的内容,只要在终端输入命令即可。取消更改的名称用命令unalias命令:在命令后输入要取消的名称,再输入名称。 3.输入命令将文件内容HELLO重定向创建文本文件/root/nn,然后用然后再使用追加重定向输入内容为word。步骤与输入内容HELLO一样,然后用命令显示文件的全部内容。 4.使用命令ls /etc显示/etc目录下的内容,命令是分页显示。“|”是管道符号,它可以将多个命令输出信息当作某个命令的输入。 5 实验二文件和目录操作命令 实验目的: 1、掌握LINUX下文件和目录的操作命令,如pwd、cd、ls、touch、mkdir、rmdir、cp、 mv、rm等。

嵌入式Linux内核移植详解(顶嵌)

内核移植阶段 内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。 内核和用户界面共同为用户提供了操作计算机的方便方式。也就是我们在windows下看到的操作系统了。由于内核的源码提供了非常广泛的硬件支持,通用性很好,所以移植起来就方便了许多,我们需要做的就是针对我们要移植的对象,对内核源码进行相应的配置,如果出现内核源码中不支持的硬件这时就需要我们自己添加相应的驱动程序了。 一.移植准备 1. 目标板 我们还是选用之前bootloader移植选用的开发板参数请参考上文的地址: https://www.360docs.net/doc/6117110752.html,/thread-80832-5-1.html。bootloader移植准备。 2. 内核源码 这里我们选用比较新的内核源码版本linux-2.6.25.8,他的下载地址是 ftp://https://www.360docs.net/doc/6117110752.html,/pub/linux/kernel/v2.6/linux-2.6.25.8.tar.bz2。 3. 烧写工具 我们选用网口进行烧写这就需要内核在才裁剪的时候要对网卡进行支持 4. 知识储备 要进行内核裁剪不可缺少的是要对内核源码的目录结构有一定的了解这里进 行简单介绍。 (1)arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子 目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体 系结构的子目录。PC机一般都基于此目录。 (2)block/:部分块设备驱动程序。 (3)crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验 算法。 (4) documentation/:文档目录,没有内核代码,只是一套有用的文档。 (5) drivers/:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目 录:如,/block 下为块设备驱动程序,比如ide(ide.c)。 (6)fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持 一个文件系统, 例如fat和ext2。

嵌入式Linux系统内核的配置、编译和烧写

实验二 嵌入式Linux系统内核的配置、编译和烧写 1.实验目的 1)掌握交叉编译的基本概念; 2)掌握配置和编译嵌入式Linux操作系统内核的方法; 3)掌握嵌入式系统的基本架构。 2.实验环境 1)装有Windows系统的计算机; 2)计算机上装有Linux虚拟机软件; 3)嵌入式系统实验箱及相关软硬件(各种线缆、交叉编译工具链等等)。 3.预备知识 1)嵌入式Linux内核的配置和裁剪方法; 2)交叉编译的基本概念及编译嵌入式Linux内核的方法; 3)嵌入式系统的基本架构。 4.实验内容和步骤 4.1 内核的配置和编译——配置内核的MMC支持 1)由于建立交叉编译器的过程很复杂,且涉及汇编等复杂的指令,在这里 我们提供一个制作好的编译器。建立好交叉编译器之后,我们需要完成 内核的编译,首先我们要有一个完整的Linux内核源文件包,目前流行 的源代码版本有Linux 2.4和Linux 2.6内核,我们使用的是Linux 2.6内核; 2)实验步骤: [1]以root用户登录Linux虚拟机,建立一个自己的工作路径(如用命令 “mkdir ‐p /home/user/build”建立工作路径,以下均采用工作路径 /home/user/build),然后将“cross‐3.3.2.tar.bz2、dma‐linux‐2.6.9.tar.gz、 dma‐rootfs.tar.gz”拷贝到工作路径中(利用Windows与虚拟机Linux 之间的共享目录作为中转),并进入工作目录; [2]解压cross‐3.3.2.tar.bz2到当前路径:“tar ‐jxvf cross‐3.3.2.tar.bz2”; [3]解压完成后,把刚刚解压后在当前路径下生成的“3.3.2”文件夹移 动到“/usr/local/arm/”路径下,如果在“/usr/local/”目录下没有“arm” 文件夹,用户创建即可; [4]解压“dma‐linux‐2.6.9.tar.gz”到当前路径下:

linux内核编译和生成makefile文件实验报告

操作系统实验报告 姓名:学号: 一、实验题目 1.编译linux内核 2.使用autoconf和automake工具为project工程自动生成Makefile,并测试 3.在内核中添加一个模块 二、实验目的 1.了解一些命令提示符,也里了解一些linux系统的操作。 2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境 三、实验要求 1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。可运行程序生成在src/main目录下。 2要求独立完成,按时提交 四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析) 1.Makefile的流程图: 2.内核的编译基本操作 1.在ubuntu环境下获取内核源码 2.解压内核源码用命令符:tar xvf linux- 3.18.12.tar.xz 3.配置内核特性:make allnoconfig 4.编译内核:make 5.安装内核:make install

6.测试:cat/boot/grub/grub.conf 7.重启系统:sudo reboot,看是否成功的安装上了内核 8.详情及结构见附录 3.生成makefile文件: 1.用老师给的projec里的main.c函数。 2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。 3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(main,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 4.新建Makefile文件,如下: AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main first_SOURCES=main.c 5.运行命令aclocal 命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。 6.运行命令autoheader 命令成功之后,会在目录下产生config.h.in这个新文件。 7.运行命令autoconf 命令成功之后,会在目录下产生configure这个新文件。 8.运行命令automake --add-missing输出结果为: Configure.ac:11:installing./compile’ Configure.ac:8:installing ‘.install-sh’ Configure.ac:8:installing ‘./missing’ Makefile.am:installing ‘./decomp’ 9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。 10.运行命令./configure就可以自动生成Makefile。 4.添加内核模块

02--基于ARM9的Linux2.6内核移植

基于ARM9的Linux2.6内核移植 姓名 系别、专业 导师姓名、职称 完成时间

目录 摘要................................................... I ABSTARCT................................................ II 1 绪论.. (1) 1.1课题研究的背景、目的和意义 (1) 1.2嵌入式系统现状及发展趋势 (1) 1.3论文的主要工作 (4) 2 嵌入式 Linux系统构成和软件开发环境 (5) 2.1嵌入式Linux系统的体系结构 (5) 2.2嵌入式Linux系统硬件平台 (5) 2.3嵌入式Linux开发软件平台建立 (7) 2.4本章小结 (11) 3 嵌入式Linux的引导BootLoader程序 (12) 3.1 BootLoader概述 (12) 3.2 NAND Flash和NOR Flash的区别 (13) 3.3本章小结 (19) 4 Linux内核的编译、移植 (20) 4.1 Linux2.6内核的新特性简介 (20) 4.2 Linux内核启动流程 (20) 4.3内核移植的实现 (21) 4.4 MTD内核分区 (23) 4.5配置、编译内核 (24) 4.6本章小结 (26) 5 文件系统制作 (27) 5.1 yaffs文件系统简介 (27) 5.2 内核支持YAFFS文件系统 (27) 5.3本章小结 (30) 6测试 (31) 6.1简单测试方法的介绍 (31) 6.2编写简单C程序测试移植的系统 (31) 6.3在开发板执行测试程序 (32)

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转) linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间 linux内核是如何组成的? 答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、 VFS(Virtual File Systerm)虚拟文件系统、NS(Network Stack)网络协议栈、DD(Device Drivers)设备驱动 linux 内核源代码 linux内核源代码是如何组成或目录结构? 答:arc目录存放一些与CPU体系结构相关的代码其中第个CPU子目录以分解boot,mm,kerner等子目录 block目录部分块设备驱动代码 crypto目录加密、压缩、CRC校验算法 documentation 内核文档 drivers 设备驱动 fs 存放各种文件系统的实现代码 include 内核所需要的头文件。与平台无关的头文件入在include/linux子目录下,与平台相关的头文件则放在相应的子目录中 init 内核初始化代码 ipc 进程间通信的实现代码 kernel Linux大多数关键的核心功能者是在这个目录实现(程序调度,进程控制,模块化) lib 库文件代码 mm 与平台无关的内存管理,与平台相关的放在相应的arch/CPU目录net 各种网络协议的实现代码,注意而不是驱动 samples 内核编程的范例 scripts 配置内核的脚本 security SElinux的模块 sound 音频设备的驱动程序 usr cpip命令实现程序 virt 内核虚拟机 内核配置与编译 一、清除 make clean 删除编译文件但保留配置文件

Linux内核移植开发手册

江苏中科龙梦科技有限公司 Linux内核移植开发手册 修 订 记 录 项 次 修订日期 版 本修订內容修订者审 核 1 2009‐02‐04 0.1 初版发行陶宏亮, 胡洪兵 2 2009‐11‐20 0.2 删除一些 多余文字 陶宏亮, 胡洪兵

DISCLAIMER THIS DOCUMENTATION IS PROVIDED FOR USE WITH LEMOTE PRODUCTS. NO LICENSE TO LEMOTE PROPERTY RIGHTS IS GRANTED. LEMOTE ASSUMES NO LIABILITY, PROVIDES NO WARRANTY EITHER EXPRESSED OR IMPLIED RELATING TO THE USAGE, OR INTELLECTUAL PROPERTY RIGHT INFRINGEMENT EXCEPT AS PROVIDED FOR BY LEMOTE TERMS AND CONDITIONS OF SALE. LEMOTE PRODUCTS ARE NOT DESIGNED FOR AND SHOULD NOT BE USED IN ANY MEDICAL OR LIFE SUSTAINING OR SUPPORTING EQUIPMENT. ALL INFORMATION IN THIS DOCUMENT SHOULD BE TREATED AS PRELIMINARY. LEMOTE MAY MAKE CHANGES TO THIS DOCUMENT WITHOUT NOTICE. ANYONE RELYING ON THIS DOCUMENTATION SHOULD CONTACT LEMOTE FOR THE CURRENT DOCUMENTATION AND ERRATA. JIANGSU LEMOTE TECHNOLOGY CORPORATION LIMITED MENGLAN INDUSTRIAL PARK,YUSHAN,CHANGSHU CITY,JIANGSU PROVINCE,CHINA Tel: 0512‐52308661 Fax: 0512‐52308688 Http: //https://www.360docs.net/doc/6117110752.html,

基于Linux内核编程的实验报告(Linux内核分析实验报告)

基于Linux内核编程的实验报告(Linux内核分析实验 报告) 以下是为大家整理的基于Linux内核编程的实验报告(Linux内核分析实验报告)的相关范文,本文关键词为基于,Linux,内核,编程,实验,报告,分析,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。 Linux内核分析实验报告

实验题目:文件系统实验 实验目的:linux文件系统使用虚拟文件系统VFs作为内核文件子系统。可以安装多种 不同形式的文件系统在其中共存并协同工作。VFs对用户提供了统一的文件访问接口。本实验的要求是 (1)编写一个get_FAT_boot函数,通过系统调用或动态模块调用它可以提 取和显示出FAT文件系统盘的引导扇区信息。这些信息的格式定义在内核文件的fat_boot_sector结构体中。函数可通过系统调用或动态模块调用。 (2)编写一个get_FAT_dir函数,通过系统调用或动态模块调用它可以 返回FAT文件系统的当 前目录表,从中找出和统计空闲的目录项(文件名以0x00打头的为从未使用过目录项,以0xe5打头的为已删除的目录项),将这些空闲的目录项集中调整到目录表的前部。这些信息的格式定义在内核文件的msdos_dir_entry结构体中。 硬件环境:内存1g以上 软件环境:Linux(ubuntu)2-6实验步骤: 一:实验原理: 以实验4为蓝本,在优盘中编译并加载模块,启动测试程序,查

/proc/mydir/myfile的文件内容。从优盘得到fat文件系统的内容存在msdos_sb_info结构中,然后得到msdos_sb_info结构相应的属性值,得到实验一的数据。实验二中,得到fat文件系统第一个扇区的十六个文件信息。然后按照文件名头文字的比较方法,应用归并排序的方法,将头文件是0x00和0xe5的文件调到前面,其他的文件调到后面 二:主要数据结构说明: (1)超级块对象: 数据结构说明:一个已经安装的文件系统的安装点由超级块对象代表。 structsuper_block{... conststructsuper_operations*s_op;} (2)索引i节点对象 数据结构说明:索引i节点对象包含了内核要操作的文件的全部控制信息,对应着打开文件的i节点表。structinode{ conststructinode_operations*i_op;...} (3)目录项对象 数据结构说明:录项对象代表了文件路径名的各个部分,目录文件名和普 通文件名都属于目录项对象。structdentry{

linux实验报告(编译内核)

湖北大学 学生实验报告 实验课程网络实用技术 开课学院计算机与信息工程学院 任课教师徐婕 学生姓名骆婧 学生学号20112211042100 70 专业班级计科一班 学生年级2011级 2013-2014 学年第二学期

一.实验目的 通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。 二.实验内容 1.Linux环境下的C或者C++编译和调试工具的使用 2.向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和 姓名信息。 3.Linux新内核的编译、安装和配置。 4.编写应用程序以测试新的系统调用并输出测试结果。 三、实验步骤 第一步:解压文件 1.下载linux-3.13.3.tar.xz压缩包。 2.在Ubantu系统下,解压该文件,解压之后得到linux- 3.13.3文件包 # tar –xf linux-3.13.3.tar.xz 3.将解压后的文件包复制到/usr/src # cp linux3.13.3 /usr/src 第二步:修改源程序,增加系统调用 1.gedit /usr/src/linux-3-13.3/kernel/sys.c (增加系统调用,使用面向内核的 打印函数printk打印姓名学号) 使用gedit命令,可以直接在文档编辑器中直接修改。修改好后按保存关闭文档编辑器。 在开头加入头文件: #include 在末尾加入函数 asmlinkage int sys_mycall(void) { printk(KERN_ALERT "My name is XXXX!My studentid is XXXXXXX\n"); return 1; } 2.gedit /usr/src/linux-3-1 3.3/arch/x86/include/asm/syscalls.h 在倒数第二行后插入 asmlinkage int sys_mycall(void);

linux2.6内核的编译步骤及模块的动态加载-内核源码学习-linux论坛

[原创]linux2.6内核的编译步骤及模块的动态加载-内核源码 学习-linux论坛 05年本科毕业设计做的是Linux下驱动的剖析,当时就买了一本《Linux设备驱动程序(第二版)》,但是没有实现将最简单的helloworld程 序编译成模块,加载到kernel里。不过,现在自己确实打算做一款芯片的Linux的驱动,因此,又开始看了《Linux设备驱动程序》这本书,不过已 经是第三版了。第二版讲的是2.4的内核,第三版讲的是2.6的内核。两个内核版本之间关于编译内核以及加载模块的方法都有所变化。本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础知识的铺垫。当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。个人用的Linux版本为:Debian GNU/Linux,内核版本为:2.6.20-1-686.第一步,下载Linux内核的源代码,即构建LDD3(Linux Device Drivers 3rd)上面所说的内核树。 如过安装的Linux系统中已经自带了源代码的话,应该在/usr/src目录下。如果该目录为空的话,则需要自己手动下载源代码。下载代码的方法和链接很多,也可以在CU上通过

https://www.360docs.net/doc/6117110752.html,/search/?key=&;q=kernel&a mp;frmid=53去下载。不过,下载的内核版本最好和所运行的Linux系统的内核版本一致。当然,也可以比Linux系统内核的版本低,但高的话应该不行(个人尚未实践)。 Debian下可以很方便的通过Debian源下载: 首先查找一下可下载的内核源代码: # apt-cache search linux-source 其中显示的有:linux-source-2.6.20,没有和我的内核版本完全匹配,不过也没关系,直接下载就可以了: # apt-get install linux-source-2.6.20 下载完成后,安装在/usr/src下,文件名为: linux-source-2.6.20.tar.bz2,是一个压缩包,解压缩既可以得到整个内核的源代码: # tar jxvf linux-source-2.6.20.tar.bz2

我来说linux移植过程

我对linux移植过程的整体理解 首先,要开始移植一个操作系统,我们要明白为什么要移植。因为我们要在另外一个平台上用到操作系统,为什么要用操作系统,不用行不行?这个问题的答案不是行或不行来回答。单片机,ARM7都没有操作系统,我们直接对寄存器进行操作进而实现我们需要的功能也是可以。但是,一些大型的项目设计牵涉很多到工程的创建,单纯对裸机进行操作会显得杂乱庞大这时候需要一个操作系统。 操作系统的功能能。我们用到操作系统,一方面可以控制我们的硬件和维护我们的硬件,另一方面可以为我们得应用程序提供服务。呵呵,这样说还是很抽象,具体到项目中就可以感受到操作系统的好处。 Linux操作系统的移植说白了总共三大部分:一,内核的重新编译。二,bootloader的重新编译。三,文件系统的制作。在这里要解释这些名词也很不好说的明白,首先,一个完整的操作系统是包括这三大部分的,内核、Bootloader、文件系统。我们知道Linux有很多版本,不同的版本只是文件系统不一样而内核的本质都是一样的。 那么,我们开始进行移植。首先是内核。1.我们需要下载一个内核源码,这个在网上很好下载,下载后,保存下。2.把这个压缩包复制到ubuntu(我用的版本)里,一般复制到/home/dong/SoftEmbed(我的目录,呵呵),然后呢,我们需要对这个内核进行修改重新编译,为什么要这样做,因为我们要让内核为我们的ARM服务,所以需要修改一些东西的。至于具体如何修改,我已经写在另外一个文档里了。3.修改的内容主要是 Makefile(设置体系架构为arm,设置交叉编译器)、时钟频率(我们板子的频率)、内核配置(进入内核配置主要是设置一些选项以适合我们的开发板)。具体设置步骤我会另加说明。4.设置好后我们需要重新编译内核,用的是make zImage命令。编译后就生成了我们自己编译好的内核,呵呵。 接下来,进行文件系统的移植。我们需要一个Yaffs2文件系统压缩包。1.复制这个压缩包到/home/dong/SoftEmede(我自己在ubuntu里建的目录,呵呵),2.解压,会生成一个文件夹。3.给内核打补丁,通过执行 ./patsh-ker.sh c /内核目录。呵呵4.进入 make menuconfig中配置选项,要选择对yaffs2的支持,具体怎么设置我写在另一个文档。 接下来,我们进行根文件制作,需要一个制作工具 mkyaffs2image.taz.还是复制到我自己的目录下,解压,安装。接着,我们需要对Busybox的移植、配置,具体移植、配置步骤我另写,呵呵。最后是构建我们自己的文件系统,到此我们已经完成了内核移植和文件系统的制作。准备移植,呵呵。今天先写到这里,累了。

Linux kernel内核升级全过程,教你一次成功

序言 由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间( 反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。 网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多 文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。 现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统 ,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享 ~~! 一、准备工作 首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。 启动Linux系统,并用根用户登录,进入终端模式下。 1、查看Linux内核版本 # uname -a 如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是 2.4.x,那恭喜你,闯关通过,赶快进行下一步。 2、下载2.6内核源码 下载地址:https://www.360docs.net/doc/6117110752.html,/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 3、下载内核升级工具 (1)下载module-init-tools-3.2.tar.bz2 https://www.360docs.net/doc/6117110752.html,/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2 (2)下载mkinitrd-4.1.18-2.i386.rpm https://www.360docs.net/doc/6117110752.html,/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm (3)下载lvm2-2.00.25-1.01.i386.rpm https://www.360docs.net/doc/6117110752.html,/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm (4)下载device-mapper-1.00.19-2.i386.rpm https://www.360docs.net/doc/6117110752.html,/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm (2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到https://www.360docs.net/doc/6117110752.html,/guestbook留下你的邮箱,我给你发过去)

嵌入式Linux内核移植试验

07秋嵌入式实验 1. 实验设备的连接 1. 参看《JXARM9-2410-1用户手册》中第一章,熟悉目标设备硬件,进行硬件检测。 2. 参看《JXARM9-2410-1用户手册》中第二章,安装好实验设备:电源,并口等。 3. 参看《JXARM9-2410-1用户手册》中第三章,了解目标设备硬件资源。 2. 软件安装与设置 参看《JXARM9-2410-1用户手册》中第四章,在主机Windows环境下安装实验环境:ADT,而DNW(一种超级终端软件)和tftp可以直接运行。 3. ADT IDE 开发流程 参看《JXARM9-2410-1用户手册》中第五章,通过并口线连接目标机的简易仿真口(ARM9SIMPLE),进行无操作系统实验:(实验教材P38) (1)对于包含ADT 1000仿真器的用户,请选择ARM9LPT,对于简易调试器的用户,请选择ARM9SIMPLE,本实验选择ARM9SIMPLE。 (2)导入examples目录中的工作区文件“examples.aws”,调试运行leddemo、stepper 等程序 (3)注意:要运行的工程需设置为当前工程 4. Uboot基本实验 参看《JXARM9-2410-1用户手册》中第七章的“7.2 Windows环境下使用u-boot”:(实验教材P186) (1)将连接目标机简易仿真口的并口线去掉,连接好UART0串口线,网线。 (2)在宿主机打开远程登陆软件DNW(或者超级终端),选择115200,COM1,建立与目标机的连接 (3)重新启动目标机,在DNW中会看到与目标机LCD相同的信息,表示连接成功! (4)在超级终端中使用Uboot命令行接口,练习Uboot的基本命令:help、flinfo、bdinfo、md、dmp、printenv、setenv、saveenv、run等

实验6 ——Linux 内核移植实验

实验 6 Linux-2.6.28移植实验 【实验目的】 熟悉Linux-2.6.28移植过程。 【实验步骤】 第一步:从https://www.360docs.net/doc/6117110752.html,/pub/linux/kernel/v2.6下载linux-2.6.28.tar.bz2压缩文件(或光盘中提供); 【图5-3-1】 第二步:将linux-2.6.28.tar.bz2压缩文件复制到Linux工作目录; 第三步:在Linux下利用tar jxvf linux-2.6.28.tar.bz2命令解压linux-2.6.28.tar.bz2压缩文件。 第四步:进入解压后的linux-2.6.28目录下,利用vi编辑工具修改linux-2.6.28目录下的顶层Makefile文件。 第五步:修改linux-2.6.28目录下的顶层Makefile文件,设置编译linux操作系统的CPU体系架构变量ARCH 和所使用的交叉编译工具链变量CROSS_COMPILE(注:实验使用arm-linux交叉编译工具链 4.2.1版本,可从https://www.360docs.net/doc/6117110752.html,/pub/snapgear/tools/arm-linux/下载arm-linux-tools-20070808.tar.gz压缩文件,解压到/OPT目录下)。 改为 ARCH ?= arm CROSS_COMPILE ?=/opt/usr/local/bin/arm-linux-

【图5-3-2】 第六步:将linux-2.6.28目录下的arch/arm/configs/mainstone_defconfig文件复制为xsbase270_defconfig文件。 第七步:在linux-2.6.28/arch/arm/mach-pxa目录下增加一个xsbase270.c文件(实际上从该目录下的mainstone.c复制而来.也可以直接复制实验代码中的文件),然后根据实际平台进行修改。 第八步:修改linux-2.6.28\arch\arm\mach-pxa目录下的Makefile文件,增加编译xsbase270.c 的编译选项,即:obj-$(CONFIG_MACH_XSBASE270) += xsbase270.o。 第九步:修改linux-2.6.28\arch\arm\mach-pxa目录下的Kconfig文件,增加在裁剪内核时支持对EELiod/Liod平台的选择 【图5-3-3】 第十步:linux-2.6.28/drivers/mtd/maps文件夹中增加一个xsbase270-flash.c文件(注:xsbase270-flash.c从该目录下的mainstone-flash.c修改而来, 也可以直接复制实验代码中的文件)。 第十一步:修改linux-2.6.28\drivers\mtd\maps目录下的Makefile文件,增加编译xsbase270-flash.c的编译选项, 即:obj-$ (CONGIG_MTD_XSBASE270 ) += xsbase270-flash.o。

基于ARM的嵌入式linux内核的裁剪与移植.

基于ARM的嵌入式linux内核的裁剪与 移植 0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linu 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

相关文档
最新文档