jz2440 開發板玩法




話說,開發板的資料目錄亂得讓人頭皮發麻,最后發現 \開發板資料\百問網精智JZ2440開發板4.3寸LCD版使用手冊.pdf 是關鍵

網頁資料:http://wiki.100ask.net/分類:ARM裸機加強版

驅動安裝

驅動文件目錄路徑別太長,否則windows會報錯:系統找不到指定的文件

百問網的新版 Jz2440 v3.0,插上電源線
Windows:

  1. OpenJTAG{禁用驅動簽名} 排線口 (被識別成 兩個USB<=>JTAG&RS232+一個USB Serial Port
  2. micro USB Serial 串口Prolific USB-to-Serial Comm Port 會被系統自動更新安裝
  3. micro USB Devices 設備開機模式下的DNW驅動 SEC S3C2410X Test B/D
    找了很久,最后發現可以直接用開源工具 Zadig 全部一鍵安裝。這里附上2.5版本zadig-2.5.zip

    附上:
    VMware的三種網絡模式

驅動安裝完成

排線是三個 OPENJTAG設備(USB Serial Port + 100ASK JTAG + 100ASK Serial Port )
靠近網線口的是 micro USB Serial 串口 Prolific USB-to-Serial Comm Port

在usb串口旁邊的是 Micro USB Devices SEC S3C2410X Test B/D,這個設備偶爾會報錯, 且會受VMware的影響,重開開發板/虛擬機就可以了(最好是插線開機后再開虛擬機)

可以調整COM端口號,雙擊設備,端口設置-高級,設置為COM1

編譯 Bootloader 和操作系統

Bootloader選用 U-Boot,操作系統選用 Linux-arm
arm交叉編譯器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別
交叉編譯ARM版的U-Boot,及插樁打補丁

因為虛擬網卡出了問題,又剛好有個分區沒用到,所以直接放uboot等源碼文件並映射成虛擬磁盤給VMware用了。
注意:如果按任意鍵召喚不了uboot菜單,那么建議斷開usb,先插電開機再串口調試,按開發板的RESET鍵重啟

准備交叉編譯環境

推薦做完以下步驟后,試試自己搭建交叉編譯環境 https://crosstool-ng.github.io/docs/ 及其 GithubRepos
鑒於國內垃圾 GFW網絡,在此提供官網下的無修改壓縮包 crosstool-ng-1.24.0.zip

用資料提供的古老的ubuntu9.10.......,當然我在評論區放了Ubuntu18.04的使用方案

把這個arm-linux-gcc包解壓到根目錄,然后編輯環境變量

sudo tar -xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 -C /opt
sudo vi /etc/profile

在末尾添加如下

export PATH=$PATH:/opt/gcc-3.4.5-glibc-2.3.6/bin

ESC,輸入:wq保存退出

刷新環境變量配置

source /etc/profile

**注: ** 如果之前使用了其他版本的gcc,那么應該關閉終端窗口后重新打開,並source /etc/profile,否則make里的gcc變量依然是之前的版本
如果希望自定義交叉編譯環境,可以用export 設置僅在當然終端窗口生效的臨時全局變量,或者在原 make 命令后接上如 CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- 用於指定編譯器路徑及其前綴

插樁編譯 Uboot

tar xjf u-boot-1.1.6.tar.bz2
cd u-boot-1.1.6/
patch -p1 < ../u-boot-1.1.6_jz2440.patch

使用配置並一鍵編譯

make 100ask24x0_config
make

或者指定交叉編譯工具鏈前綴路徑變量

make ARCH=arm CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- 100ask24x0_config
make CROSS_COMPILE=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- 

插樁編譯 Linux2.6

tar xjf linux-2.6.22.6.tar.bz2
cd linux-2.6.22.6
patch -p1 < ../linux-2.6.22.6_jz2440.patch
make s3c2410_defconfig   #如果不想用現成的config_ok,可以基於uboot提供的2410自己修改(方案1)
cp config_ok .config     #直接使用100ask官方做好的配置(方案2)
make menuconfig          #配置菜單(可選)
make uImage

燒寫開發板

  1. 用 oflash 燒寫工具將U-boot.bin寫入開發板的 Nor Flash (通過 OpenJTAG 排線接口)
  2. 通過 USB 串口 用終端命令和開發板交互(數字電路原理:信息本質都是通過電信號傳輸的,所以和網絡ssh本質上也沒有差別,和ssh一樣操作命令就行) 記得設置波特率為115200並關閉流控(Flow Control),然后重開終端窗口 可以通過串口操作Uboot,利用Uboot提供的 [k]Download linux kernel uImage來將嵌入式操作系統如Linux2.6寫入開發板

接上兩根usb,用 終端工具 Mobaxterm新建串口終端,

,將開發板開機,在uboot 倒計時間內按空格鍵進入uboot菜單,選 [k]Download linux kernel uImage,然后打開 dnw_100ask.exe ,在標題顯示USB:OK時點 USB Port->Transmit選擇編譯好的uImage燒寫即可。

附上官方說明:

在uboot進入接收文件模式后,應注意如下

附上:jz2440在u-boot中通過網絡方式燒錄鏡像的幾種方法

  1. [b]Boot the system.

然后選b啟動系統,會打印出Linux啟動日志,最后的Linux日志還有報錯Panic,開發板的屏幕也是花屏的,但至少成功寫入系統了,后面再修修補補應該就可以了。


根據報錯日志,初步懷疑是寫入的yaffs2文件系統有問題

再搞搞,把開發板資料里提供的二進制文件 fs_mini.yaffs2 通過DNW協議燒寫進去



可以看到成功進入Linux命令行了,說明我自己做的文件系統還有問題,那么,就暫時用開發板資料提供的吧

參考:【內核配置】一、從標准linux-2.6.22.6系統到ARM平台JZ2440開發板的linux系統的修改攻略

VMware網絡配置

設置兩個網卡(一個NAT,一個橋接)
編輯-虛擬網絡編輯器,為NAT分配IP段,為橋接設置自動選擇物理網卡

NAT固定IP參考:https://www.cnblogs.com/telwanggs/p/10882369.html

完善Linux環境

現在只刷入了一個內核,其他什么都沒有。啟動不了終端,也敲不了 ls 之類的命令

  1. 根文件系統、 添加 busybox 工具鏈及 libc 編程運行支持庫
  • 內核只提供了內存文件系統等少量東西,如果沒有實際的文件系統和運行庫,那么就像Windows只有內核文件·C:\Windows\system32\NTOSKRNL.EXE·及其最相關的幾個文件,而沒有C盤其他文件一樣,連cmd都打不開。
  • BusyBox是一個適合嵌入式的 Linux 常用命令的精簡集,提供了如 ls cp tar 等命令。
  • libc 是支持C語言運行的標准支持庫,沒有這個,連 printf 函數都用不了。(常見的libc有 glibc uClibc等)

參考:構造嵌入式Linux最小根文件系統及其 Busybox、libc運行庫

配置NF

  1. NFS 基於網絡協議的文件系統(方便操作,不必每次都燒寫文件系統)
    服務端(虛擬機系統)操作:
    安裝NFS服務
    sudo apt-get install nfs-kernel-server
    編輯配置sudo vi /etc/exports並添加如下
/work/nfs_root               *(rw,sync,no_root_squash)
/home/xx/myCode               *(rw,sync,no_root_squash)

重新生效配置

##或者重新讀取配置(如果有已掛載了NFS的客戶端,請使用這個)
## exportfs來自nfs-utils包
exportfs -arv
##或者重啟NFS服務器以生效配置(如果有已掛載了NFS的客戶端,就不能重啟服務,而只能重新讀取配置)
sudo service nfs-kernel-server restart

客戶端(開發板)操作:
修改初始化腳本 (/etc/profile 或 /etc/init.d/rcS 之類的,修改其中一個即可)
增加開機靜態ip地址,如加上

ifconfig 192.168.123.9 up

(以下 192.168.123.74 是虛擬機系統橋接網卡模式下的IP,路由器列表里可以找到,也可以用 ip a 命令查看)

  • 樹莓派掛載NFS目錄
## mount -t nfs [虛擬機IP地址]:[需掛載目錄] [要掛載到開發板哪個路徑] -v

mount -t nfs 192.168.123.74:/home/xx/myCode/pi/driver/out /mnt -v
  • JZ2440作為客戶端掛載NFS目錄(JZ2440 比較舊,所以加些參數向下兼容)
## mount -t nfs -o intr,nolock,rsize=1024,wsize=1024,vers=3 [虛擬機IP地址]:[需掛載目錄] [要掛載到開發板哪個路徑] -v

mount -t nfs -o intr,nolock,rsize=1024,wsize=1024,vers=3 192.168.123.74:/home/xx/myCode/devices/out /mnt -v


ps: -v是日志參數,便於人工排錯

也可修改/etc/fstab使其開機自動掛載

如果修改了fstab,那么可以使其馬上生效,命令:

## v是信息; a(all)掛載/etc/fstab里的全部
sudo mount -va

編程

  1. 給U-boot添加命令
    uboot1.1.6為例:在common目錄下新建 cmd_hi.c 並把 cmd_console.c 的內容復制進去再依樣畫葫蘆地修改,記得去掉 #ifdef CONFIG_CMD_CONSOLE 之類的宏定義。
    修改 common 目錄下的 Makefile文件,在 COBJS 的定義后面增加一行 COBJS+= cmd_hi.o
    然后編譯燒寫即可
    測試:在u-boot啟動時按任意鍵阻止uboot啟動操作系統,然后按q退出菜單。在 OPENJtag>的命令框里輸入 hi ,即可看到程序執行的結果。
    源碼 common/cmd_yu.c
/*
 * @Author: yu
 * copy based on cmd_display.c
 */

#include <common.h>
#include <command.h>

#if (CONFIG_COMMANDS )// & CFG_CMD_YU)

// #undef DEBUG_DISP
// extern void _do_yu (void);
int do_yu (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
    if (argc == 0)
        printf("Hello World, Yu!!!\n");
    else 
        printf("Hello World, %s!\n", argv);
    
    printf("More Message print: \n");
    printf("=======================\n");
    printf("Flag is %d\n", flag);
    printf("Argc is %d\n", argc);
    printf("Argv are %s\n", argv?argv:"");
    return 0;
}

/***************************************************/

U_BOOT_CMD(
	yu,	2,	1,	do_yu,
	"yu- a demo for print Hello World\n",
	"[<string>]\n"
	"    - with <string> argument: print \"Hello World, <string>!\" \n"
	"    - without arguments: print \"Hello World, Yu!!!\" \n"
);

#endif	
/* CFG_CMD_YU */

記得改一下 common目錄下的 Makefile 文件

  1. 自己寫驅動
    embedded-linux_by_draapho

串口使用

串口占用問題

強制關閉被占用串口的方法,如關閉 COM3
任務管理器-性能-(左下角)資源監視器

或者設備管理器-右擊COM3-屬性-端口設置-高級
修改端口

然后確定,串口就會被強制關閉並被系統修改端口

配置開發板的串口文件傳輸工具 sz/rz

(sz/rz)是Z-Modem 串口文件傳輸協議的支持工具
sz 是 send zmodem file ,即發送文件(基於zmodem協議)
rz 是 recevice zmodem file ,即接收文件(基於zmodem協議)
這種協議比 rx 支持的 X-Modem 協議要快很多

把Z-Modem協議的支持工具發到開發板上
即下載並解壓出 sz 和 rz 程序到電腦,然后通過 ARM開發板內置的 rx 命令把這兩個發送到開發板
zmodem_tools3.4.8.zip

然后復制到/bin目錄,並賦權限 777

cp ./rz /bin/
cp ./sz /bin/
chmod 777 /bin/rz
chmod 777 /bin/sz

以后通過串口傳輸文件只需要如下步驟即可:
MobaXterm 通過串口發送文件到 嵌入式 Linux 下位機
開發板輸入命令

# rz

然后按住Shift鍵右擊,通過 Zmodem 協議發送文件即可

MobaXterm 其他常用使用技巧

復制:只需要按住鼠標左鍵選中文字,即可自動復制。
粘貼:右擊粘貼文字
傳輸文件:在側邊欄選 SCP 或 FTP,然后就可以看到了,支持拖拽。側邊欄上方的按鈕也請多留意。

FTP 等服務器程序:

甚至還能掃端口...

VSCode Remote SSH 遠程開發

VSCode+Remote SSH 插件
VMware + Ubuntu18+
MobaXterm 遠程終端(支持串口和SSH等)

STC12C5A60s2 系列屬於 8051 單片機

使用 Ubuntu18.04LTS x64 代替古老的ubuntu9

原因: Ubuntu9太老了,VSCode Remote SSH 不支持

換USTC軟件源
安裝ssh服務端(默認自啟動)

sudo apt install openssh-server

關閉圖形界面

sudo systemctl set-default multi-user.target   # 關閉用戶圖形界面
sudo reboot
sudo systemctl start gdm3.service          #臨時開啟圖形界面
sudo systemctl stop gdm3.service          #臨時關閉圖形界面,只在注銷用戶后才生效

32位支持庫注意
64位的Linux執行32位軟件是需要安裝32位庫的,否則如光盤附帶的 arm-linux-gcc(即arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2里的gcc)會報錯

-bash: /opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc: No such file or directory

安裝32位庫

sudo apt install lib32ncurses5 lib32z1 lib32stdc++6

解決vi方向鍵打出字母的問題

sudo apt remove vim-common
sudo apt install vim

復制交叉編譯工具
把對方提供的虛擬機系統(如ubunu12)里的 交叉編譯工具壓縮成 tar.gz 后,放到你自己的虛擬機系統(如 Ubuntu18,記得安裝32位庫)
然后配置環境變量(參考上面多編譯環境的配置)
注 which arm-linux-gcc 可以得到工具的安裝路徑

將arm-linux交叉編譯環境加入臨時系統變量

sudo nano /etc/profile  #然后在文件末尾加入 
export GCC_S3C=/opt/gcc-3.4.5-glibc-2.3.6/bin
export PATH=$PATH:$GCC_S3C   # 如果需要多版本gcc就不要把這個加入環境變量配置文件里,而只在使用make的那個窗口執行一下,等於提供臨時變量,非常適合多版本gcc的使用

配置虛擬網卡

設置2個虛擬機網卡,但要記得都配置DNS地址
一個NAT模式,固定IP地址不隨網段變化(固定IP且通外網,但被NAT隔離只能在本地和虛擬機內訪問,局域網不可見)
一個橋接模式,IP地址隨着宿主機網段變化(用於局域網連接,相當於新建一個網卡直接連接到當前局域網內)

也可使用 NAT 端口轉發
將虛擬機里的端口轉發到本地系統上。這樣外部就可以訪問該虛擬機端口了

使用VSCode Remote SSH 進行遠程開發

VSCode安裝Remote SSH插件,然后連接到虛擬機ubuntu進行遠程開發,並為虛擬機ubuntu安裝vscode遠程C/C++插件,一切都舒服了!!!
開發過程
服務端插件
SSH 免密登錄(適用VSCode)

make CROSS_COMPILE=$GCC_S3C/arm-linux- 100ask24x0_config
make CROSS_COMPILE=$GCC_S3C/arm-linux-       #如果你還嫌不夠方便,可以安裝 VSCode的 Code Runner 插件並把這個命令加入其插件的Custom Command配置里,按F1選Run Custom Command(或輸入Ctrl+Alt+K)執行

或者根據 VS Code 安裝與配置(使用MSYS2環境與mingw-w64 編譯環境)(12089) 配置那你的 arm-linux-gcc 編譯腳本

也可以把 SEC S3C2410X Test B/D 連接到虛擬機系統里變成一個VMware USB Device。把linux版的 dnwoflashmkyaffsimagemkyaffs2image 等工具 放進ubuntu

然后直接在Windows操作串口,在ubuntu里編譯出u-boot.bin后用Linux版的dnw 文件名寫入即可。

使用ubuntu16.04配置linux內核和busybox出現錯誤的解決方法總結

修復變量爆紅(頭文件Include路徑問題)

arm-linux-gcc -v -x c -E /dev/null


然后把#include <...> search starts here:下面的內容,都加入 VSCode 遠程安裝的 C/C++插件配置里的 includePath

/opt/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/include
/opt/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/../../../../arm-linux/sys-include
/opt/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/../../../../arm-linux/include

另外內核驅動開發,還需要 __KERNEL__ MODULE 以及 linux/autoconf.h 里的宏定義,用 KEY=val 表示。見:https://blog.csdn.net/Ningjianwen/article/details/88075042

VSCode常用快捷鍵

右擊變量 更多功能
Ctrl+鼠標左擊 查看函數/變量定義
ALT+左右方向鍵 前進后退

VSCode 開發 STM32 等單片機

另外,如果你還需要開發單片機程序,那么VSCode有個替代Keil的插件: EIDE

生成開發板系統對應的man手冊

https://mirrors.edge.kernel.org/pub/linux/kernel/ 下載Linux源碼(如 https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.4.39.tar.gz ),安裝編譯手冊所需要的工具man和xmlto,然后在下載的Linux源碼目錄

make mandocs

編譯后輸出目錄為 內核源碼/Documentation/DocBook/man
然后安裝到 man 手冊資料路徑下(會安裝到內核條目 /usr/local/man/man9/,並不會覆蓋原來的 man 1~8)

sudo make installmandocs

然后測試一下

man 9 printk


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM