<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > linux-2.6.14移植到S3C2440

          linux-2.6.14移植到S3C2440

          作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          現(xiàn)在應(yīng)該很少使用2.6.14的內(nèi)核了,但由于項目需要,最近移植了2.6.版本的內(nèi)核到S3C2440上,并移植了CS8900網(wǎng)卡驅(qū)動(網(wǎng)卡驅(qū)動移植參考http://blog.csdn.net/ce123/article/details/8424399)。之所以移植網(wǎng)卡驅(qū)動,是因為yaffs2格式的文件系統(tǒng)一直掛載不成功,啟動后的錯誤信息如下:
          Mounted devfs on /dev
          Freeing init memory: 92K
          Failed to execute /linuxrc. Attempting defaults...
          Kernel panic - not syncing: No init found. Try passing init= option to kernel.
          這個問題只能先放一下,最后成功掛載nfs。yaffs2格式文件系統(tǒng)的問題以后再深入研究。整理一下最近做過的東西,怕遺忘了。

          1.頂層Makefile的修改

          [plain]view plaincopy
          print?
          1. ARCH?=arm
          2. CROSS_COMPILE?=arm-linux-
          交叉編譯器的使用請參考http://blog.csdn.net/ce123/article/details/8333421

          2.修改時鐘頻率

          linux/arch/arm/mach-s3c2410/mach-smdk2440.c
          [plain]view plaincopy
          print?
          1. staticvoid__initsmdk2440_map_io(void)
          2. {
          3. s3c24xx_init_io(smdk2440_iodesc,ARRAY_SIZE(smdk2440_iodesc));
          4. s3c24xx_init_clocks(12000000);//12M
          5. s3c24xx_init_uarts(smdk2440_uartcfgs,ARRAY_SIZE(smdk2440_uartcfgs));
          6. s3c24xx_set_board(&smdk2440_board);
          7. }

          3.修改機(jī)器ID

          linux/arch/arm/tools/mach-types
          s3c2440 ARCH_S3C2440 S3C2440 168
          這個值要和uboot中的值對應(yīng)起來,在uboot的arch/arm/tools/mach-types中有如下定義:
          #define MACH_TYPE_S3C2440 168
          這兩個值一樣即可。

          4.設(shè)置Nand Flash分區(qū)

          4.1建立Nand Flash分區(qū)表

          在linux/arch/arm/mach-s3c2410/devs.c中增加
          [plain]view plaincopy
          print?
          1. #include
          2. #include
          3. #include
          4. /*NANDparititon*/
          5. staticstructmtd_partitionsmdk_default_nand_part[]={
          6. [0]={
          7. .name="Board_uboot",
          8. .offset=0x00000000,
          9. .size=0x00080000,
          10. },
          11. [1]={
          12. .name="Board_kernel",
          13. .offset=0x00240000,
          14. .size=0x00200000,
          15. },
          16. [2]={
          17. .name="Board_yaffs2",
          18. .offset=0x00440000,
          19. .size=0x0FB40000,
          20. }
          21. };
          name:代表分區(qū)名字
          size:代表flash分區(qū)大小(單位:字節(jié))
          offset:代表flash分區(qū)的起始地址(相對于0x0的偏移)
          劃分3個區(qū),分別存放uboot, kernel和文件系統(tǒng)。

          4.2.加入Nand Flash分區(qū)

          [plain]view plaincopy
          print?
          1. staticstructs3c2410_nand_setsmdk_nand_sets[]={
          2. [0]={
          3. .name="NAND",
          4. .nr_chips=1,
          5. .nr_partitions=ARRAY_SIZE(smdk_default_nand_part),
          6. .partitions=smdk_default_nand_part,
          7. },
          8. };
          nr_partitions: 指明partition_info中定義的分區(qū)數(shù)目
          partitions:分區(qū)信息表

          4.3.建立Nand Flash芯片支持

          [plain]view plaincopy
          print?
          1. staticstructs3c2410_platform_nandsmdk_nand_info={
          2. .tacls=20,
          3. .twrph0=60,
          4. .twrph1=20,
          5. .nr_sets=ARRAY_SIZE(smdk_nand_sets),
          6. .sets=smdk_nand_sets,
          7. };
          tacls,twrph0,twrph1的意思見S3C2440的數(shù)據(jù)手冊,這3個值最后會被設(shè)置到NFCONF中。
          sets:支持的分區(qū)集
          nr_set:分區(qū)集的個數(shù)

          4.4.加入Nand Flash芯片支持到Nand Flash驅(qū)動

          [plain]view plaincopy
          print?
          1. structplatform_devices3c_device_nand={
          2. .name="s3c2410-nand",
          3. .id=-1,
          4. .num_resources=ARRAY_SIZE(s3c_nand_resource),
          5. .resource=s3c_nand_resource,
          6. .dev={
          7. .platform_data=&smdk_nand_info
          8. }
          9. };
          name:設(shè)備名稱
          id:有效設(shè)備編號,如果只有唯一的一個設(shè)備為-1,有多個設(shè)備從0開始計數(shù).
          num_resource:有幾個寄存器區(qū)
          resource:寄存器區(qū)數(shù)組首地址
          dev:支持的Nand Flash設(shè)備

          4.5指定啟動時初始化

          linux/arch/arm/mach-s3c2410/mach-smdk2440.c
          [plain]view plaincopy
          print?
          1. staticstructplatform_device*smdk2440_devices[]__initdata={
          2. &s3c_device_usb,
          3. &s3c_device_lcd,
          4. &s3c_device_wdt,
          5. &s3c_device_i2c,
          6. &s3c_device_iis,
          7. &s3c_device_nand,//增加
          8. };

          5.禁止Flash ECC校驗

          修改drivers/mtd/nand/s3c2410.c 文件s3c2410_nand_init_chip()函數(shù),在該函數(shù)體最后加上一條語句:
          [plain]view plaincopy
          print?
          1. chip->eccmode=NAND_ECC_NONE;

          6.支持devfs

          在2.6.14中已經(jīng)不支持devfs了,內(nèi)核配置文件中已經(jīng)沒有了相關(guān)的配置選擇,但其代碼還保留了。修改fs/Kconfig文件找到menu "Pseudo filesystems"添加如下語句:
          [plain]view plaincopy
          print?
          1. configDEVFS_FS
          2. bool"/devfilesystemsupport(OBSOLETE)"
          3. dependsonEXPERIMENTAL
          4. help
          5. Thisissupportfordevfs,avirtualfilesystem(like/proc)which
          6. providesthefilesysteminterfacetodevicedrivers,normallyfound
          7. in/dev.Devfsdoesnotdependonmajorandminornumber
          8. allocations.Devicedriversregisterentriesin/devwhichthen
          9. appearautomatically,whichmeansthatthesystemadministratordoes
          10. nothavetocreatecharacterandblockspecialdevicefilesinthe
          11. /devdirectoryusingthemknodcommand(orMAKEDEVscript)anymore.
          12. Thisisworkinprogress.Ifyouwanttousethis,you*must*read
          13. thematerialin,especially
          14. thefileREADMEthere.
          15. Notethatdevfsnolongermanages/dev/pts!IfyouareusingUNIX98
          16. ptys,youwillalsoneedtomountthe/dev/ptsfilesystem(devpts).
          17. Notethatdevfshasbeenobsoletedbyudev,
          18. .
          19. Ithasbeenstrippeddowntoabareminimumandisonlyprovidedfor
          20. legacyinstallationsthatuseitsnamingschemewhichis
          21. unfortunatelydifferentfromthenamesnormalLinuxinstallations
          22. use.
          23. Ifunsure,sayN.
          24. configDEVFS_MOUNT
          25. bool"Automaticallymountatboot"
          26. dependsonDEVFS_FS
          27. help
          28. ThisoptionappearsifyouhaveCONFIG_DEVFS_FSenabled.Setting
          29. thistoYwillmakethekernelautomaticallymountdevfsonto/dev
          30. whenthesystemisbooted,beforetheinitthreadisstarted.
          31. Youcanoverridethiswiththe"devfs=nomount"bootoption.
          32. Ifunsure,sayN.
          33. configDEVFS_DEBUG
          34. bool"Debugdevfs"
          35. dependsonDEVFS_FS
          36. help
          37. IfyousayYhere,thenthe/devfilesystemcodewillgenerate
          38. debuggingmessages.Seethefile
          39. formore
          40. details.
          41. Ifunsure,sayN.
          42. configDEVPTS_FS_XATTR
          43. bool"/dev/ptsExtendedAttributes"
          44. dependsonUNIX98_PTYS
          45. help
          46. Extendedattributesarename:valuepairsassociatedwithinodesby
          47. thekernelorbyusers(seetheattr(5)manualpage,orvisit
          48. fordetails).
          49. Ifunsure,sayN.
          50. configDEVPTS_FS_SECURITY
          51. bool"/dev/ptsSecurityLabels"
          52. dependsonDEVPTS_FS_XATTR
          53. help
          54. Securitylabelssupportalternativeaccesscontrolmodels
          55. implementedbysecuritymoduleslikeSELinux.Thisoption
          56. enablesanextendedattributehandlerforfilesecurity
          57. labelsinthe/dev/ptsfilesystem.
          58. Ifyouarenotusingasecuritymodulethatrequiresusing
          59. extendedattributesforfilesecuritylabels,sayN.
          60. configTMPFS
          61. bool"Virtualmemoryfilesystemsupport(formershmfs)"
          62. help
          63. Tmpfsisafilesystemwhichkeepsallfilesinvirtualmemory.
          64. Everythingintmpfsistemporaryinthesensethatnofileswillbe
          65. createdonyourharddrive.Thefilesliveinmemoryandswap
          66. space.Ifyouunmountatmpfsinstance,everythingstoredthereinis
          67. lost.
          68. Seefordetails.

          7.內(nèi)核裁剪

          7.1內(nèi)核配置文件

          將arch/arm/configs/s3c2410_defconfig .config拷到內(nèi)核目錄樹根下:
          cp arch/arm/configs/s3c2410_defconfig .config
          make menuconfig 將s3c2410_defconfig 導(dǎo)入,在s3c2410_defconfig基礎(chǔ)上,裁剪內(nèi)核。

          7.2內(nèi)核選項

          Loadable module support >
          [*] Enable loadable module support
          [*] Automatic kernel module loading

          System Type >
          [*] S3C2410 DMA support

          Floating point emulation >
          [*] NWFPE math emulation

          接下來要做的是對內(nèi)核MTD子系統(tǒng)的設(shè)置

          Device Drivers >
          Memory Technology Devices (MTD) >
          [*] MTD partitioning support /*支持MTD分區(qū),這樣我們在前面設(shè)置的分區(qū)才有意義*/
          [*] Command line partition table parsing /*支持從命令行設(shè)置flash分區(qū)信息,靈活*/
          RAM/ROM/Flash chip drivers >
          <*> Detect flash chips by Common Flash Interface (CFI) probe
          <*> Detect nonCFI AMD/JEDECcompatible flash chips
          <*> Support for Intel/Sharp flash chips
          <*> Support for AMD/Fujitsu flash chips
          <*> Support for ROM chips in bus mapping
          NAND Flash Device Drivers >
          <*> NAND Device Support
          <*> NAND Flash support for S3C2410/S3C2440 SoC
          Character devices >
          [*] Nonstandard serial port support
          [*] S3C2410 RTC Driver

          接下來做的是針對文件系統(tǒng)的設(shè)置

          File systems >
          <> Second extended fs support #去除對ext2的支持
          Pseudo filesystems >
          [*] /proc file system support
          [*] Virtual memory file system support (former shm fs)
          [*] /dev file system support (OBSOLETE)
          [*] Automatically mount at boot (NEW)
          這里會看到我們前先修改fs/Kconfig的成果,devfs已經(jīng)被支持上了
          Miscellaneous filesystems >
          Network File Systems >
          <*> NFS file system support

          7.3編譯

          make即可。

          8.總結(jié)

          以前將linux-2.6.30.4移植S3C2440(http://blog.csdn.net/ce123/article/details/6581248),基本過程很相似。照著這個過程一般都能移植好一個內(nèi)核,但明白這個過程背后的東西才是王道。


          關(guān)鍵詞: linux-2.6.14移植S3C244

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();