第一篇:實驗四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一下就會出現如下圖所示。
⑶ 配置內核界面,不用做任何更改,在主菜單里選擇
編譯內核:
#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 再次make zImage以下就不會出現錯誤了。 編譯結束后,會在arch/arm/boot目錄下生成linux內核映象文件:zImage ⑷ 進行zImage文件測試 首先Nor Flash啟動開發板,在超級終端中選擇功能號[k],用dnw下載剛剛配置的zImage鏡像文件。然后再把開發板Nand Flash啟動,x35觸屏會出現小企鵝的圖案,同時超級終端也會出現如下圖所示畫面: 2、官網下載源碼移植 2.1 移植前準備 ⑴ 官網下載內核Linux-2.6.32.tar.bz2。新建一個工作目錄s3c2440,將內核源碼包拷貝至/home/linux2.6.32.2工作目錄下。 ⑵ 下載yaffs2代碼 官網下載cvs-root.tar.gz壓縮包,拷貝至/home/linux2.6.32.2工作目錄下。2.2 建立自己的目標平臺 ⑴ 解壓內核源碼 進入linux2.6.32.2目錄下執行解壓命令:#tar –jxvf linux-2.6.32.tar.bz2,將內核源碼進行解壓。 ⑵ 進入內核目錄,修改makefile,并對內核進行默認配置進行修改183行,修改: ARCH ?=arm CROSS_COMPILE ?=arm-linux- ⑶ 給內核打yaffs2文件系統的補丁 執行#tar-zxvf cvs-root.tar.ga解壓命令,對cvs-root.tar.gz壓縮包進行解壓。 ① 修改內核fs/Kconfig 在內核fs/Kconfig文件中添加兩行內容:#Patched by YAFFS Source”fs/yaffs2/Kconfig” ② 修改內核fs/Makefile 在Makefile中添加一行:ojb-$(CONFIG_YAFFS_FS)+=yaffs2/ ③ 在內核fs/目錄下創建yaffs2目錄 將yaffs2源碼目錄下的Makefile.kernel文件復制為內核fs/yaffs2/Makefile; 將yaffs2源碼目錄下的Kconfig文件復制到內核fs/yaffs2目錄下; 將yaffs2源碼目錄下的*.c 和*.h文件復制到內核fs/yaffs2目錄下。 ④ 修改機器碼 由于Bootloader傳遞給Linux內核的機器號為1999,為與Bootloader傳遞參數一致,修改Linux內核的機器號。友善之臂已經為 mini2440 申請了自己的機器碼為 1999,它位于linux-2.6.32.2/arch/arm/tools/mach_types文件中。 ⑤ 修改時鐘源頻率 在 mach-mini2440.c(刪除原來的mach-mini2440.c,通過復制mach-smdk2440.c 得到的新的mach-mini2440.c)的第 160 行static void __init smdk2440_map_io(void)函數中,把其中的 16934400(代表原 SMDK2440 目標板上的晶振是 16.9344MHz)改為 mini2440 開發板上實際使用的 12000000(代表 mini2440 開發板上的晶振 12MHz)。 找到MACHINE_START(S3C2440, “SMDK2440”),修改為: MACHINE_START(MINI2440, “FriendlyARM Mini2440 development board”) ⑥ 從 SMDK2440 到 MINI2440 因為我們要制作自己的 mini2440平臺體系,因此把 mach-mini2440.c 中所有的 smdk2440 字樣改為 mini2440。 除此之外,還有一個地方需要改動,在 mini2440_machine_init(void)函數中,把 smdk_machine_init()函數調用注釋掉,因為我們后面會編寫自己的初始化函數,不需要調用 該函數。 2.3 定制內核配置 ⑴ 使用 Linux 官方自帶的 mini2440 配置,在 Linux 源代碼根目錄下執行 #make mini2440_defconfig命令: ⑵ 移植 Nand 驅動并更改分區信息 進入到/home/linux2.6.32.2/linux-2.6.32.2/arch/arm/mach-s3c2440文件夾中執行: # gedit mach-mini2440.c命令: 在 mach-mini2440.c 中加入以下代碼: static struct mtd_partition mini2440_default_nand_part[] = { [0] = {.name = “supervivi”,.size = 0x00040000,.offset = 0, }, [1] = {.name = “param”,.offset = 0x00040000,.size = 0x00020000, }, [2] = {.name = “Kernel”,;對應/dev/mtdblock2.offset = 0x00060000,.size = 0x00500000, }, [3] = {.name = “root”,.offset = 0x00560000,.size = 1024 * 1024 * 1024, }, [4] = {.name = “nand”,;.offset = 0x00000000,.size = 1024 * 1024 * 1024, } };static struct s3c2410_nand_set mini2440_nand_sets[] = { [0] = {.name = “NAND”,.nr_chips = 1,.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),.partitions = mini2440_default_nand_part, }, };static struct s3c2410_platform_nand mini2440_nand_info = {.tacls = 20,.twrph0 = 60,.twrph1 = 20,.nr_sets = ARRAY_SIZE(mini2440_nand_sets),.sets = mini2440_nand_sets,.ignore_unset_ecc = 1, };如下圖所示: 還需要把 nand flash 設備注冊到系統中,static struct platform_device *mini2440_devices[] __initdata = { &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &s3c_device_nand,;把nand flash設備添加到開發板的設備列表結構 }; ⑶ 配置和編譯帶 YAFFS2 支持的內核 在執行#make zImage命令時會出現如下錯誤: 錯誤:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer 通過網上查找資料 于是在自己的mach-mini2440.c中加入 #include 再次make zImage以下就不會出現錯誤了。 執行命令:#make menuconfig 要使用yaffs2文件系統,需要先配置nand flash驅動支持,在Device drivers菜單中選擇MTD選項如圖,并按回車進入 找到NAND Device Support選項并進入 選擇Nand Flash驅動支持 返回到內核配置主菜單,并找到File systems選項進入 找到如圖選項Miscellaneous filesystems并進入 找到YAFFS2支持選項,如圖選擇 然后 再次進入/home/linux2.6.32.2/linux-2.6.32.2/arch/arm/boot根目錄中查看Image映像文件: zImage文件測試結果如下圖所示: 3、移植 DM9000網卡驅動 3.1 設備資源初始化 找到linux-2.6.32.2/drivers/net/dm9000.c,頭文件處添加2410相關的配置定義。如下圖所示: 再填充該平臺設備的資源設置,以便和DM9000網卡驅動接口配合起來,如下 3.2 調整DM9000所用的位寬寄存器 打開linux-2.6.32.2/ drivers/net/dm9000.c,添加如下圖所示內容: 3.3 關于MAC地址 static int __devinit dm9000_probe(struct platform_device *pdev)函數中可以看出: 實際上到此為止DM9000就已經移植結束了。3.4 配置內核加入DM9000,并編譯運行測試 在內核根目錄下執行#make menuconfig 命令,開始在內核中配置網卡驅動,依次選擇如下菜單項Device Drivers--->Network device support---> Ethernet(10 or 100Mbit)---> 然后執行:#make zImage 命令 最后生成arch/arm/boot/zImage文件。 使用”k”命令把它燒寫到開發板,并使用默認的文件系統啟動,在命令行終端運行ifconfig命令可以看到如圖所示: 四、實驗小結 本次實驗做的是關于Linux內核移植,實驗的內容多,比較復雜。在理論課中我們對Linux內核的組成部分有了了解,以及對其移植到ARM平臺的流程有了一定的認識。在具體實戰的時候,我們參考SMDK2440的代碼,然后搭建自己的mini2440平臺,最終生成內核文件zImage,,在移植Nand Flash驅動時出現了問題,最后在老師的引導下解決了問題,最后對DM9000網卡進行驅動,由于時間的原因我們對Linux內核移植只做了一部分,我們會在以后的時間進行完善。總之,實驗過程中比較坎坷。 五、思考題 1、Linux內核有哪些模塊組成? 答:Linux內核由進程管理、內存管理、文件系統、網絡接口、進程間通信、設備驅動等模塊組成。 2、簡述生成內核映像文件zImage的步驟。答:(1)使用命令make config進入命令行 (2)使用make meunconfig命令進行內核裁剪 (3)使用make clean命令,清理之前生成的目標文件 (4)使用make dep命令,編譯變量的依賴關系 (5)使用make zImage命令生成內核映像文件 電 子 科 技 大 學 實 驗 報 告 學生姓名: 學 號: 指導教師: 實驗地點: 實驗時間: 一、實驗室名稱: Linux環境高級編程實驗室 二、實驗項目名稱: 插件框架實驗 三、實驗學時: 4學時 四、實驗目的: 需要說明為什么要進行本次實驗 五、實驗內容: PPT上的4個版本程序,以及綜合練習 六、實驗步驟: PPT上的4個版本程序,以及綜合練習 七、總結及心得體會: 八、對本實驗過程及方法、手段的改進建議: 報告評分: 指導教師簽字: 實習四 圖書館利用基礎及中文全文數據庫 實習目的: 一、通過實習,了解館藏書目數據庫的基本原理和常用檢索途徑,熟練掌握查詢本館、相關高校及科研院所圖書館檢索書刊信息的方法;樹立信息資源共享意識,重點了解國內學術資源分布情況,掌握外文期刊聯合目錄的使用方法,提升獨立獲取外文期刊原文的信息能力。 二、了解國內中文全文數據庫的收錄特點及檢索功能,包括電子期刊和電子圖書全文數據庫,重點掌握清華同方的“中文期刊全文數據庫”的使用方法;了解重慶維普的“中文科技期刊數據庫(全文版)”和萬方數據資源系統的“數字化期刊”等全文數據庫的收錄范圍和使用方法;了解超星數字圖書館等目前國內較常見的電子書刊資源及其常用檢索途徑和方法。實習題: 一、圖書館利用基礎 1、查找廈門理工學院圖書館(http://lib.xmut.edu.cn/index.asp)是否收藏商業模式方面的叢書,若有,請記錄你感興趣的其中一本的書名、編者、出版地、出版社、出版年、分類號、收藏單位、索取號以及出借狀態等書目信息。 2、廈門理工學院圖書館是否收藏外文的中國軍事百科全書?若有,請問目前收藏有多少分冊?可以在廈門理工學院圖書館幾樓的哪個書庫獲取呢? 3、請查找與你所學專業相關的一種期刊,中外文均可,并請記錄刊名、有無曾用名、出版地、創刊年、分類號、收藏單位等書目信息。 4、利用搜索引擎查找并登錄以下網站,試將每個網站的主頁加入“收藏夾”中,以便調用。 (1)登錄“廈門理工學院圖書館”主頁,瀏覽其館藏書目查詢功能頁面,并自命題查找與你專業密切相關的圖書或期刊; (2)登錄并瀏覽“中國高等教育數字圖書館(CALIS/eduChina)”主頁,從主頁的“查找全國高校圖書館資料”欄目練習檢索有關的圖書或期刊; (3)登錄并瀏覽“國家科技圖書文獻中心(NSTL)”主頁,自命題練習檢索相關的圖書或期刊,并嘗試注冊新用戶和密碼,模擬外文原文訂購過程。 二、中文期刊全文數據庫 (1)通過校園網進入“萬方數據資源”的主頁,可以按照“學術期刊”的學科分類或者論文檢索途徑,找出一種與你所學專業密切相關的期刊,請嘗試查閱最新一期刊載的論文全文內容。 (2)通過校園網進入“維普資訊”的主頁,練習通過“快速檢索”、“高級檢索”、“分類檢索”、“期刊導航”等途徑查找自己感興趣的學術論文,并瀏覽文獻題錄及全文內容(練習題目可自選,或參考前面題目)。在使用過程中,請思考以上三個資源站點之間有何異同。 (3)通過校園網分別登錄“超星數字圖書館”、“讀秀學術搜索”或“書生之家”等電子圖書閱讀網,瀏覽各網站的欄目信息,嘗試查找和閱讀相關專業的圖書全文。 【實驗報告提交】 1、作業以WORD格式完成,在同一個文檔中無需分開,標明題目即可。可發送到郵箱jihuish@126.com(郵件標題請注明學號和姓名),或者提交打印稿均可。 2、作業須由自己完成,如發現有copy行為,取消實驗成績; 3、本次實驗成績記入平時成績的10%。 《數據庫原理與應用》實驗報告 實驗名稱: 實驗四 學號: 班級: 姓名: 軟件工程 一、實驗目的 (1)了解Oracle數據庫中的用戶管理,模式,權限管理和角色管理。 (2)掌握為用戶分配權限的方法。 (3)了解為不同用戶分配不同權限的目的及原因。 二、實驗過程 1.用系統帳戶sys登錄數據庫,分別創建數據庫內部用戶user_one和user_two,創建時自己為用戶分配帳戶口令。 create user user_one identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;create user user_two identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;/ 14 2.為了使兩位用戶登錄數據庫請為其授予相應的權限。 grant create session to user_one,user_two; 3.授予用戶user_one在自己模式下創建表的權限,在任何模式下刪除表的權限,授予用戶user_two可以在任何模式下創建表的權限,查詢任何模式下表中數據的權限和在任何模式下創建視圖的權限。 grant create table,drop any table to user_one;grant create any table,select any table,create any view to user_two; / 14 4.分別用user_one和user_two登錄,寫出相應的SQL語句驗證為其授予的權限。(如果建立的表中有主鍵約束,需要預先授予user_one和user_two用戶create any index的權限。) grant create any index to user_one,user_two;在user_one中建表A create table a(x number,y date); 在user_two中建表B create table b(x number,y date); 在user_two中查詢表A select * from user_one.a;3 / 14 從user_one中刪除表B drop table user_two.b;在user_two中查詢表B Select * fromb; 在user_two中建立視圖VIEW_A create view view_a(x,y) as select x,y from b;/ 14 5.用系統帳戶sys登錄數據庫,創建用戶user_three,將角色權限DBA授予用戶user_three,并將S、P、J、SPJ四張表導入到user_three模式下。 create user user_three identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;grant dba to user_three;/ 14 6.使用user_three登錄,完成如下授權,在user_one和user_two用戶下執行相應的SQL語句驗證授權是否成功。 (1)把對表S的INSERT權力授予用戶user_one,并允許他再將此權限授予其他用戶。 grant insert on s to user_one with grant option; 在user_one中插入數據 insert into user_three.s(sno,sname,city,sphone) values('1','a','湖北',null); commit; grant insert on user_three.s to user_two;在user_two中插入數據 insert into user_three.s(sno,sname,city,sphone)6 / 14 values('2','b','湖北',null); commit; (2)用戶user_two對S,P,J三個表有SELECT和INSERT權力 grant select,insert on s to user_two;grant select,insert on p to user_two;grant select,insert on j to user_two; 從user_two中查詢表S select * from user_three.s;/ 14 從user_two中給表S插入數據 insert into user_three.s(sno,sname,city,sphone) values('3','c','湖北',null); commit; (3)用戶user_one對SPJ表有DELETE權力,對QTY字段具有UPDATE權力。 grant delete,update(qty)on spj to user_one; 在user_one中刪除sno為s1的數據 delete from user_three.spj where sno='S1'; commit;/ 14 在user_one中將sno為s2的數據的qty改為0 update user_three.spj set qty=0 where sno='S2'; commit; (4)收回user_one對S表的插入權限。 revoke insert on s from user_one; 嘗試在user_one中插入數據 insert into user_three.s(sno,sname,city,sphone) values('3','d','湖北',null); commit;9 / 14 7.把對用戶user_two授予的所有權限收回,只保留登錄權限。(系統權限和對象權限應該分別收回) revoke select,insert on s from user_two;revoke select,insert on p from user_two;revoke select,insert on j from user_two;revoke create any index,create any table,create any view,select any table from user_two; 嘗試在user_two中創建表C create table c(x number,y date);10 / 14 8.用系統帳戶sys登錄數據庫,創建用戶user_four,將角色權限DBA授予此用戶,在user_four的模式下導入Sudent、Course和SC表。 create user user_four identified by 980916 default tablespace users temporary tablespace temp quota unlimited on users;grant dba to user_four;/ 14 9.使用user_four登錄,創建角色STUDBA,將修改Student、Course、SC表結構的權限,插入、刪除、修改和查詢三張表中數據的權限授予角色STUDBA,將角色的權限授予user_one和user_two。 create role studba;grant alter,insert,delete,update,select on s to studba;grant alter,insert,delete,update,select on c to studba;grant alter,insert,delete,update,select on sc to studba;grant studba to user_one,user_two;commit;/ 14 10.對于通過STUDBA角色授予的權限,在user_one和user_two用戶下執行相應的SQL語句對權限進行驗證。 修改表權限驗證 alter table user_four.c add collage varchar2(40);commit;select * from user_four.c; 更新數據驗證 update user_four.s set major='軟件工程' where major='植物保護';select * from user_four.s where major='植物保護'; 插入數據驗證 / 14 insert into user_four.sc(sno,cno,grade)values(103000,300,100);commit;select * from user_four.sc where sno=103000 and cno=300; 刪除數據驗證 delete from user_four.sc where sno=103000 and cno=300;commit;select * from user_four.sc where sno=103000 and cno=300; 三、實驗總結 / 14 南京信息工程大學實驗(實習)報告 實驗(實習)名稱子查詢實驗(實習)日期得分指導教師方忠進 系 計算機專業網絡工程年級三班次2姓名李海磊學號 20112346047 一.實驗目的1.掌握子查詢的表示。 2.進一步掌握 SQL Server 查詢分析器的使用方法,加深對 SQL語言的嵌套查詢語句的理解 二.實驗內容 1.在數據庫 EDUC 中實現一下查詢: 1)求選修了高等數學的學生學號和姓名; 2)求 C1 課程的成績高于張三的學生學號和成績;3)求其他系中比計算機系某一學生年齡小的學生信息(即求其它系中年齡小于計算機系年齡最大者的學生); 4)求其他系中比計算機系學生年齡都小的學生信息; 5)求選修了 C2 課程的學生姓名; 6)求沒有選修 C2 課程的學生姓名; 7)查詢選修了全部課程的學生的姓名 8)求至少選修了學號為“S2”的學生所選修的全部課程的學生學號和姓名。 2.提高操作實驗 建立“工程-零件”數據庫及如下 4 個表,并輸入實驗數據,用 SQL 語句實現如下三個查詢:1)求供應項目 j4 紅色零件的供應商號及名稱 2)求沒有上海供應商生成的零件的項目號 3)至少使用了供應商 S5 所供應全部零件的項目號。 表結構如下: 供應商(S): 三.實驗步驟(詳細)第二篇:實驗四
第三篇:實驗四
第四篇:實驗四總結報告
第五篇:實驗四報告