当前位置:文档之家› linux-2.6.28在mini2440上的移植之初步移植-在路上

linux-2.6.28在mini2440上的移植之初步移植-在路上

deann | 我的帖子空间短消息论坛任务 | 个人中心版主管理退出

● 主页

● 论坛

● 搜索

● 帮助

● 导航

● 家园

● 默认风格

● purple

● blue

● red

● orange

● green

● violet

● pink

● greyish-green

● gray

● brown

USR论坛?linux及其嵌入式|linux&embedded?STAR工作组专区? 第一期 linux-2.6.28初步移植

主题管理 12下一页

返回列表回复

1#

打印

字体大小: t T

deann发表于 2009-3-15 17:28 | 只看该作者

第一期 linux-2.6.28初步移植

移植

本帖最后由 deann 于 2009-3-15 21:33 编辑

注:群共享空间里我传上去的一个测试用cramfs根文件系统。

a.part1 a.part2

刚刚下载了linux-2.6.28的内核 ,打开看一下,基本根2.6.26的差不多,最起码开始这块是一样的。好,下面发第一次尝试的情况。

注意:我们板子上mach_type默认是782.

而我们用的内核技持2440时,要改成362.

你可以改supervivi,也可以改内核中的。不过内核忘了在哪里改了。我改的supervivi.

主机平台:redhat linux enterprise 4.0 即:redhat AS 4.0

工作目录:/home/dean/mini2440/linux-2.6.28

开发板:mini2440+nec3.5

1、解压:

1.

2. cd /home/dean/mini2440

3. tar jfx linux-2.6.28.tar.bz2

复制代码

呵呵,我下的是bz2的。注意:我的压缩包在mini2440目录下。

2、修改Makefile

1. gedit Makefile

复制代码

找到

ARCH?=

CROSS_COMPILE?=

文件中只有一处,其中ARCH?=后面还有些内容,忘了是什么没管,反正要改掉的。 改成:

1.

2. ARCH ?= arm

3. CROSS_COMPILE ?=arm-linux-

复制代码

3、修改arch/arm/plat-s3c24xx/common-sdmk.c

1.

2. cd arch/arm/plat-s3c24xx/

3. gedit common-sdmk.c

复制代码

找到:

1.

2. static struct mtd_partition smdk_default_nand_part[] = {

3.

4. [0] = {

5. .name = "Boot Agent",

6. .size = SZ_16K,

7. .offset = 0,

8. },

9. [1] = {

10. .name = "S3C2410 flash partition 1",

11. .offset = 0,

12. .size = SZ_2M,

13. },

14. [2] = {

15. .name = "S3C2410 flash partition 2",

16. .offset = SZ_4M,

17. .size = SZ_4M,

18. },

19. [3] = {

20. .name = "S3C2410 flash partition 3",

21. .offset = SZ_8M,

22. .size = SZ_2M,

23. },

24. [4] = {

25. .name = "S3C2410 flash partition 4",

26. .offset = SZ_1M * 10,

27. .size = SZ_4M,

28. },

29. [5] = {

30. .name = "S3C2410 flash partition 5",

31. .offset = SZ_1M * 14,

32. .size = SZ_1M * 10,

33. },

34. [6] = {

35. .name = "S3C2410 flash partition 6",

36. .offset = SZ_1M * 24,

37. .size = SZ_1M * 24,

38. },

39. [7] = {

40. .name = "S3C2410 flash partition 7",

41. .offset = SZ_1M * 48,

42. .size = SZ_16M,

43. }

44. };

复制代码

将大括号里的内容注释掉,或删去,或在原来的基础上修改: 我注释掉,加上nandflash分区信息,如下:

1.

2. static struct mtd_partition smdk_default_nand_part[] = {

3.

4. [0]={

5. .name = "bootloader",

6. .offset = 0x00000000,

7. .size = 0x00030000,

8. },

9. [1]={

10. .name = "kernel",

11. .offset = 0x00050000,

12. .size = 0x00200000,

13. },

14. [2]={

15. .name = "root",

16. .offset = 0x00250000,

17. .size = 0x01400000,

18. },

19.

20. [3]={

21. .name="user",

22. .offset=0x01800000,

23. .size=0x01400000,

24. }

25. /*[0] = {

26. .name = "Boot Agent",

27. .size = SZ_16K,

28. .offset = 0,

29. },

30. [1] = {

31. .name = "S3C2410 flash partition 1",

32. .offset = 0,

33. .size = SZ_2M,

34. },

35. [2] = {

指导员

IP禁止此人

36. .name = "S3C2410 flash partition 2",

37. .offset = SZ_4M,

38. .size = SZ_4M,

39. },

40. [3] = {

41. .name = "S3C2410 flash partition 3",

42. .offset = SZ_8M,

43. .size = SZ_2M,

44. },

45. [4] = {

46. .name = "S3C2410 flash partition 4",

47. .offset = SZ_1M * 10,

48. .size = SZ_4M,

49. },

50. [5] = {

51. .name = "S3C2410 flash partition 5",

52. .offset = SZ_1M * 14,

53. .size = SZ_1M * 10,

54. },

55. [6] = {

56. .name = "S3C2410 flash partition 6",

57. .offset = SZ_1M * 24,

58. .size = SZ_1M * 24,

59. },

60. [7] = {

61. .name = "S3C2410 flash partition 7",

62. .offset = SZ_1M * 48,

63. .size = SZ_16M,

64. }*/

65. };

复制代码

我的分区己经根据自己需要做了修改,不过与大家的不会冲突,如果怕冲突的话改成这样:

1.

2. static struct mtd_partition smdk_default_nand_part[] = {

3.

4. [0]={

5. .name = "bootloader",

6. .offset = 0x00000000,

7. .size = 0x00030000,

8. },

9. [1]={

10. .name = "kernel",

11. .offset = 0x00050000,

12. .size = 0x00200000,

13. },

14. [2]={

15. .name = "root",

16. .offset = 0x00250000,

17. .size = 0x03dac000,

18. }

19.

20.

21. /*[0] = {

22. .name = "Boot Agent",

23. .size = SZ_16K,

24. .offset = 0,

25. },

26. [1] = {

27. .name = "S3C2410 flash partition 1",

28. .offset = 0,

29. .size = SZ_2M,

30. },

31. [2] = {

32. .name = "S3C2410 flash partition 2",

33. .offset = SZ_4M,

34. .size = SZ_4M,

35. },

36. [3] = {

37. .name = "S3C2410 flash partition 3",

38. .offset = SZ_8M,

39. .size = SZ_2M,

40. },

41. [4] = {

42. .name = "S3C2410 flash partition 4",

43. .offset = SZ_1M * 10,

44. .size = SZ_4M,

45. },

46. [5] = {

47. .name = "S3C2410 flash partition 5",

48. .offset = SZ_1M * 14,

49. .size = SZ_1M * 10,

50. },

51. [6] = {

52. .name = "S3C2410 flash partition 6",

53. .offset = SZ_1M * 24,

54. .size = SZ_1M * 24,

55. },

56. [7] = {

57. .name = "S3C2410 flash partition 7",

58. .offset = SZ_1M * 48,

59. .size = SZ_16M,

60. }*/

61. };

复制代码

这个是与板子带的源码相同的分区信息。

3、修改时钟频率arch/arch/mach-s3c2440/mach-smdk2440.c

1.

2. gedit /home/dean/mini2440/linux-2.6.28/arch/arm/mach-s3c2440/mach-smdk2440.c

复制代码

找到:

1.

2. static void __init smdk2440_map_io(void)

3. {

4. s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

5. s3c24xx_init_clocks(16934400);

6. s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

7. }

复制代码

把16934400改为12000000

即全部改为:

1.

2. static void __init smdk2440_map_io(void)

3. {

4. s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

5. s3c24xx_init_clocks(12000000);

6. s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

7. }

复制代码

4、配置

1.

2. cd /home/dean/mini2440/linux-2.6.28

3. make s3c2410_defconfig

4. 完成后

5. make menuconfig

复制代码

在BOOT OPTIONS中,

将kernel command line内容改成:

1. noinitrd root=/dev/mtdblock2 boot=/linuxrc console=ttySAC0

复制代码

保存

5、编译

1. make zImage

复制代码

等,好长时间,开始时有几项warnings不用管。

6、下载测试

映像在:arch/arm/boot里面。

7、结果

kernel panic结束

无法挂载根文件系统。解决办法见下楼。

本主题由 kelvinji 于 2009-4-4 19:02 提升

收藏分享评分

管理

回复引用编辑

订阅道具TOP

2#

deann发表于 2009-3-15 17:57 | 只看该作者

指导员

IP禁止此人本帖最后由 deann 于 2009-3-15 19:08 编辑

无法挂上文件系统,分区是正确的。

原因可能是没有提供devfs支持。

解决办法:

linux2.6.26已经去掉devfs,为了内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs的Kconfig文件。

linux-2.6.26/fs/Kconfig

修改的内容:

找到menu "Pseudo filesystems"

添加如下语句:

1. config DEVFS_FS

2. bool "/dev file system support (OBSOLETE)"

3. depends on EXPERIMENTAL

4. help

5. This is support for devfs, a virtual file system (like /proc) which

6. provides the file system interface to device drivers, normally found

7. in /dev. Devfs does not depend on major and minor number

8. allocations. Device drivers register entries in /dev which then

9. appear automatically, which means that the system administrator does

10. not have to create character and block special device files in the

11. /dev directory using the mknod command (or MAKEDEV script) anymore.

12.

13. This is work in progress. If you want to use this, you *must* read

14. the material in , especially

15. the file README there.

16.

17. Note that devfs no longer manages /dev/pts! If you are using UNIX98

18. ptys, you will also need to mount the /dev/pts filesystem (devpts).

19.

20. Note that devfs has been obsoleted by udev,

21. .

22. It has been stripped down to a bare minimum and is only provided for

23. legacy installations that use its naming scheme which is

24. unfortunately different from the names normal Linux installations

25. use.

26.

27. If unsure, say N.

28.

29. config DEVFS_MOUNT

30. bool "Automatically mount at boot"

31. depends on DEVFS_FS

32. help

33. This option appears if you have CONFIG_DEVFS_FS enabled. Setting

34. this to 'Y' will make the kernel automatically mount devfs onto /dev

35. when the system is booted, before the init thread is started.

36. You can override this with the "devfs=nomount" boot option.

37.

38. If unsure, say N.

39.

40. config DEVFS_DEBUG

41. bool "Debug devfs"

42. depends on DEVFS_FS

43. help

44. If you say Y here, then the /dev file system code will generate

45. debugging messages. See the file

46. for more details.

47.

48. If unsure, say N.

复制代码

1. 2. make zImage

复制代码

1. /dev file system support (OBSOLETE) (DEVFS_FS) [N/y/?] (NEW) y

2. Automatically mount at boot (DEVFS_MOUNT) [N/y/?] (NEW) y

3. Debug devfs (DEVFS_DEBUG) [N/y/?] (NEW)

4. Virtual memory file system support (former shm fs) (TMPFS) [Y/n/?] y

5. Tmpfs POSIX Access Control Lists (TMPFS_POSIX_ACL) [Y/n/?] y

6. Userspace-driven configuration filesystem (CONFIGFS_FS) [M/n/y/?] m

复制代码

编译测试,还不行,解决办法下楼见。

管理

回复 引用 编辑

评分 道具 TOP

指导员IP 禁止此人

3#

deann 发表于 2009-3-15 18:06 | 只看该作者

关闭ECC较验:

1. }

2. } else {

3. chip->ecc.mode = NAND_ECC_SOFT;

4. }

5.

6. if (set->ecc_layout != NULL)

7. chip->https://www.doczj.com/doc/f011437135.html,yout = set->ecc_layout; 8. 9. if (set->disable_ecc)

10. chip->ecc.mode = NAND_ECC_NONE;

11. } 12. 13. /* s3c2410_nand_update_chip

14. *

复制代码

改为:

1. }

2. } else {

3. chip->ecc.mode = NAND_ECC_NONE;

4. }

5.

6. if (set->ecc_layout != NULL)

7. chip->https://www.doczj.com/doc/f011437135.html,yout = set->ecc_layout; 8. 9. if (set->disable_ecc)

10. chip->ecc.mode = NAND_ECC_NONE;

11. } 12. 13. /* s3c2410_nand_update_chip

14. *

复制代码

管理

回复引用编辑评分道具TOP

指导员

IP禁止此人4#

deann发表于 2009-3-15 18:11 | 只看该作者

OK了,可以挂上文件系统了。

管理

回复引用编辑

评分道具TOP

指导员

IP禁止此人5#

kelvinji发表于 2009-3-15 20:10 | 只看该作者

dean,你的交叉编译工具链用的是哪个版本 ?

管理

回复引用编辑

评分道具TOP

指导员IP 禁止此人

6#

deann 发表于 2009-3-15 20:58 | 只看该作者 5# kelvinji

arm-linux-gcc 3.4.1

是开发板光盘里带的哦。搭建开发环境都是按开发板光盘里说的。光盘的手册上有教程。

管理

回复 引用 编辑

评分 道具 TOP

指导员

IP 禁止此

7#

Domybest 发表于 2009-3-19 21:44 | 只看该作

好,等周末我上手试试。。。。

管理

回复 引用 编辑

评分 道具 TOP

指导员8#

liaohanxin 发表于 2009-3-21 11:59 | 只看该作

嘿嘿,行了哦.

IP禁止此人

管理

回复引用编辑

评分道具TOP

指导员

IP禁止此人9#

zilong91发表于 2009-3-22 08:21 | 只看该作者

很不错啊,步骤挺详细的。

管理

回复引用编辑

评分道具TOP

指导员

IP禁止此人10#

Domybest发表于 2009-4-4 15:51 | 只看该作者

本帖最后由 Domybest 于 2009-4-4 15:52 编辑 关闭ECC较验 是修改哪个文件啊?

看别的帖子说是“driver/mtd/nand/s3c2410. c”

但是文件夹里没有2440的啊?

郁闷

管理

回复引用编辑

评分道具TOP

主题管理 12下一页返回列表

高级回复 | 发新话题

B Color Image Link Quote Code Smilies

发表回复

USR--中国自强联盟 ( 辽ICP备08006882号)|联系我们 |论坛统计|Archiver|WAP GMT+8, 2009-4-16 07:55, Processed in 0.039369 second(s), 9 queries.

Powered by Discuz!7.0.0

? 2001-2009 Comsenz Inc.

相关主题
文本预览
相关文档 最新文档