اگر تابهحال با ماژولهای کوییکتل و قابلیت OpenCpu آنها کارکرده باشید (اگر آشنایی ندارید پیشنهاد میکنم که حتماً یه سری به اینجا بزنید) میدونید که برای پروگرام این ماژول به نرمافزار ویندوزی خاصی (Qflash) نیاز هست، حالا اگر شما یک شرکت تولیدکننده با خروجی بالا باشید و توی محصولاتتون از این ماژولها استفاده کرده باشید باید چیکار میکنید؟! باید مثلاً 10 تا سیستم ویندوزی آماده کنید و فقط برای یه پروگرام ساده ازش استفاده کنید!! خب اگر از خلاقیتتون استفاده نکنید مطمئناً تنها راه شما همین هست. اما توی این آموزش میخوایم بهتون روش خیلی بهصرفهتری رو برای پروگرامر پیشنهاد بدیم و باهم قدمبهقدم پیادش کنیم (تا در نهایت بتوانیم ساخت پروگرامر OpenCpu را یاد بگیریم) پس با سیسوگ همراه باشید تا به سراغ این پروژه جذاب بریم…
پروگرام ماژول های OpenCpu
همونطور که گفتیم برای پروگرام ماژول های OpenCpu شرکت کوییکتل نیاز هست که از نرم افزار ویندوزی Qflash که نسخه لینوکسی هم نداره استفاده کنید، به همین دلیل باید برای اینکار از یک سیستم ویندوزی استفاده کنید .
داخل ماژول MC60 شرکت کوییکتل از چیپ MT6261 و در ماژول M66 از MT5303 استفاده شده، خوشبختانه در اینجا یک کد برای پروگرام کردن این چیپ ها قرار داده شده که اصل کار هست و همین به ما کمک میکنه که پروگرامر خودمون رو بسازیم.
تصویر پروگرامری که در ادامه نحوه ساختش رو توضیح میدیم:
ساخت پروگرامر
ما اساس کار خودمون رو برای پروگرام ماژول MC60 قرار میدهیم و بر اساس اون پیش میریم، حالا ما یک کد پایتون داریم و یک فایل باینری، برای اجرای کد پایتون باید از یک پردازنده قوی استفاده کنیم که ما اینجا تصمیم گرفتیم که از تراشه ارزانقیمت F1c100s که قبلاً هم در سیسوگ در موردش صحبت کرده بودیم استفاده کنیم (البته شما اگر دانشش رو داشته باشید میتونید همین کد پایتون رو برای c بازنویسی کنید و پروگرامرتون رو با مثلاً یه میکروی stm32 پیادهسازی کنید).
در اینجا میتونید راهنمای کامل استفاده از پروگرامر ماژول MC60 رو مشاهده کنید.
اساس کار به این صورت هست که بعد از اتصال تغذیه برنامه پروگرامر اجرا میشه:
- اول باید برد خودمون رو به پروگرامر متصل کنیم
- بعد از اون ولتاژ خروجی برد رو به کمک جامپر ها مشخص میکنیم ، تامین تغذیه ماژول هم برای راحتی و کامل بودن هست و هم به این دلیل که برای شروع پروگرام نیاز هست که ماژول ریست بشه
- با زدن دکمه start پروگرام شروع میشه و در صورت موفقیت آمیز بودن پیغام finished نمایش داده میشه و یک تک بوق تایید توسط بازر زده میشه
شماتیک
در ادامه شماتیک این پروگرامر رو مشاهده میکنید.
شماتیک نکته خاصی نداره ، برای راحتی کار از برد Licheepi nano
استفاده کردیم تا درگیر مدارات پردازنده نشیم و یه برد ساده داشته باشیم
در اینجا هم از یک بافر برای سریال استفاده کردیم تا در صورت مشکل داشتن پینهای سریال ماژولی که باید پروگرام به شه (مثلاً موقع مونتاژ به یک خط تغذیه وصل شده باشه و ولتاژ داشته باشه) این بافر بسوزه و بهراحتی تعویض به شه و پردازنده اصلی آسیب نبینه.
ماژول Wifi هم در اینجا تعبیهشده تا در توسعههای آینده یکسری استفاده ازش به شه و در حال حاضر نیاز به مونتاژ نیست چون کاری انجام نمیده.
نرم افزار پروگرامر
برای استفاده از این برد ما نیاز به یک ایمیج شخصیسازیشده داریم برای این کار از بیلد روت آمادهشده برای برد SINUX F1 استفاده میکنیم (اگر با بیلدروت آشنایی ندارید میتونید از اینجا شروع کنید) که داخلش پشتیبانی از licheepi nano
هم هست، البته اگر امکانات لازم رو ندارید و یا میخواید فقط تست کنید ایمیج آمادهشده رو میتونید از اینجا دانلود کنید.
ابتدا لازم هست که پشتیبانی از spi (برای LCD) و uart_2 (برای پروگرام) رو در device tree اضافه کنیم، این چند خط رو به فایل board/sisoog/sinux/f1/devicetree/linux/devicetree.dts
اضافه میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | &spi1 { status = "okay"; st7920@0{ #clock-cells = <0>; compatible = "sitronix,st7920"; reg = <0>; spi-max-frequency = <1000000>; spi-cpol; clocks = <&osc>; vcc-supply = <&vcc>; vcc: fixedregulator@0 { compatible = "regulator-fixed"; regulator-name = "fixed-supply"; regulator-min-microvolt = <2500000>; regulator-max-microvolt = <2500000>; regulator-boot-on; }; osc: oscillator { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <25000000>; }; }; }; &uart2 { pinctrl-names = "default"; pinctrl-0 = <&uart2_pe_pins>; status = "okay"; }; |
حالا این پکیج ها رو به buildroot اضافه کنیم:
- python3
- python-serial
برای اینکار دستور زیر را مینویسیم:
1 | make menuconfig |
پکیج ها در این مسیر قرار دارند:
1 2 | Target packages -> Interpreter languages and scripting -> pyhon3 Target packages -> Interpreter languages and scripting -> External python modules -> python-serial |
با زدن y بر روی هر پکیج، انتخاب شده و آماده نصب میشود.
حالا دستور
1 | make |
تا ایمیج ما ساخته به شه و بعد اون رو روی کارت حافظه انتقال میدیم.
مرحله بعدی راهاندازی نمایشگر هست، برای این کار من یک کد آماده پیدا کردم ولی نسخه کرنل استفادهشده پایین بود و makefile هم نیاز به تغییراتی داشت تا با ایمیج ما همخوانی داشته باشه، برای همین نسخه مناسب رو در اینجا قراردادم.
برای شروع اول کد درایور رو دریافت میکنیم
1 2 | git clone https://github.com/mahdi2001h/st7920fb cd st7920fb |
دستور make رو زده و آدرس بیلدروت خودمون رو هم بهش میدیم (برای استفاده از کامپایلر و کرنل)
1 | make BUILDROOTDIR=~/projects/buildroot-sinux |
فایل خروجی ما st7920fb.ko هست که توی پوشه /root برد لیچی پای اون رو قرار میدیم.
این درایور درواقع میاد و ال سی دی گرافیکی رو بهعنوان یک فریم بافر معرفی میکنه و ما میتونیم بهصورت frame buffer باهاش در ارتباط باشیم. ما میتونیم از طریق کد پایتون به فریم بافر دسترسی داشته باشیم و دیتا رو نمایش بدیم، من چندتا کتابخونه و روشهای مختلف رو بررسی کردم اما همه اونها حجم فایل زیادی تولید میکرند و پردازش زیادی میگرفتند، پس تصمیم گرفتم که از یک راه دیگه پیشبرم.
روشی که من پیش رفتم این هست که یک فایل c نوشتم که چندتا ورودی مشخص میگیره و بر اساس اونها دیتای مشخصی رو روی نمایشگر نشون میده، مثلاً این دستورات:
1 2 3 | ./display clear ./display finish ./display init |
بخشی از کد ما به این صورت هست (کد کامل رو میتونید از اینجا دریافت کنید):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | if (strcmp(argv[1], "init") == 0) { init_big_font(); clear_screen(0); draw_string(37, 2, (char *)"MC60", 4, 1, 0, 2, 1); draw_string(5, 20, (char *)"PROGRAMMER", 10, 1, 0, 2, 1); Txt_WriteString(20, 45, 0, "click to start"); } else if (strcmp(argv[1], "waiting") == 0) { init_big_font(); clear_screen(0); draw_string(20, 25, (char *)"WAITING", 7, 1, 0, 2, 1); } else if (strcmp(argv[1], "wait") == 0) { drawline(0, 50, 110, 0, 0); drawline(10, 50, 10 + 10, 0, 2); drawline(30, 50, 30 + 10, 0, 2); drawline(50, 50, 50 + 10, 0, 2); drawline(70, 50, 70 + 10, 0, 2); drawline(90, 50, 90 + 10, 0, 2); drawline(110, 50, 110 + 10, 0, 2); usleep(200000); drawline(0, 50, 120, 0, 0); drawline(20, 50, 20 + 10, 0, 2); drawline(40, 50, 40 + 10, 0, 2); drawline(60, 50, 60 + 10, 0, 2); drawline(80, 50, 80 + 10, 0, 2); drawline(100, 50, 100 + 10, 0, 2); } |
بر اساس ورودی که دریافت میکنه به عنوان پارامتر ، یک خروجی رو نمایش میده.
برای کامپایل کد، از کامپایلر buildroot استفاده میکنیم:
1 2 | export CC=${BUILDROOTDIR}/output/host/bin/arm-buildroot-linux-gnueabi-gcc $CC display.c -o display |
حالا فایل خروجی رو به پوشه /root برد لیچی پای انتفال میدیم.
قبل از ادامه کار بهتره که یه تستی داشته باشیم، sd card رو داخل ماژول قرارداده، پین های سریال ماژول رو به یک مبدل وصل کرده و تغذیه برد رو متصل میکنیم.
باید روال بوت شدن رو داخل نرم افزار ترمینال خودمون مشاهده کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | U-Boot 2020.07 (Aug 13 2022 - 09:30:56 -0400) Allwinner Technology CPU: Allwinner F Series (SUNIV) Model: Allwinner F1C100s Generic Device DRAM: 32 MiB MMC: mmc@1c0f000: 0, mmc@1c10000: 1 Setting up a 480x272 lcd console (overscan 0x0) In: serial Out: serial Err: serial Allwinner mUSB OTG (Peripheral) Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device Card did not respond to voltage select! SF: Detected xt25f128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB ========================= Boot Device: mmc0 Boot Slot 0: mmc0 Boot Slot 1: spi-nor ========================= ## Error: "splash_mmc0" not defined Unknown command 'bmp' - try 'help' gpio: pin 134 (gpio 134) value is 1 switch to partitions #0, OK mmc0 is current device Booting from MMC0... |
با یوزر root لاگین میشیم ، باید دوتا فایل داشته باشیم
1 2 3 4 5 6 | Welcome to Sisoog SINUX F1 lichee-nano login: root # # ls display st7920fb.ko # |
ابتدا با دستور insmod درایور نمایشگر رو لود میکنیم و بعد از اون چند تا دستور رو با کد display تست میکنیم.
1 2 3 | insmod st7920fb.ko ./display clear ./display finish |
حالا میریم سراغ کد اصلی که فایل mtkflasher.py هست ، به این فایل بخش های زیر اضافه شده:
- خواندن وضعیت کلید
- نمایش اطلاعات بر روی نمایشگر
- تکرار برنامه
- کنترل وضعیت خروجی ها
به طور مثال این تابع main ما هست که چرخه کامل پروگرام رو انجام میده.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | if __name__ == '__main__': os.system('echo 0 > /sys/class/gpio/gpio'+OUT_RELAY+'/value') os.system('echo 0 > /sys/class/gpio/gpio'+OUT_BUZZER+'/value') while 1 : os.system('/root/display init') flasher = MT6261() parser = argparse.ArgumentParser(description='MT6261/MT2503 Flash Tool', formatter_class=ArgsFormatter) parser.add_argument("-p", "--port", default="/dev/ttyS1", help="Serial port for flashing.") parser.add_argument("-b", "--baud", type=int, default=921600, help="Serial port baudrate.") parser.add_argument("-o", "--opt", type=int, default=1, help="""Flash Options: 0: Download Firmware and Format 1: Download Firmware only""") parser.add_argument("-n", "--no-reset", help="Do not reset after flashing", action='store_true') parser.add_argument("firmware", nargs="+", type=argparse.FileType('rb'), help="Firmware binary file.") parser.add_argument("-v", "--version", action="version", version="MT6261/MT2503 Flash Tool v" + APP_VER) parser.parse_args(namespace=flasher) while 1 : time.sleep(.1) f = open('/sys/class/gpio/gpio'+START_BTN+'/value', "r") if int(f.read(1)) == 0 : break upload_app(flasher) os.system('/root/display finish') os.system('echo 1 > /sys/class/gpio/gpio'+OUT_BUZZER+'/value') time.sleep(0.2) os.system('echo 0 > /sys/class/gpio/gpio'+OUT_BUZZER+'/value') time.sleep(0.2) os.system('echo 1 > /sys/class/gpio/gpio'+OUT_BUZZER+'/value') time.sleep(0.2) os.system('echo 0 > /sys/class/gpio/gpio'+OUT_BUZZER+'/value') os.system('echo 0 > /sys/class/gpio/gpio'+OUT_RELAY+'/value') time.sleep(2) |
این فایل رو هم به /root اضافه میکنیم.
لازم هست که اینجا یه توضیحی در مورد کنترل GPIO ها داده به شه. همونطور که میدونید توی لینوکس همهچیز یا فایل هست و یا پروسس. این سیستم به این معنی هست که پس ما با فایلها زیاد سروکار داریم حتی برای خاموش و روشن کردن یک led!
برای کار با gpio ها یک کتابخونه ای در کرنل لینوکس هست که به ما کمک میکنه به gpio ها دسترسی داشته باشیم، برای اطلاعات بیشتر میتونید به این لینک سر بزنید. برای استفاده از اون به این صورت عمل میکنیم:
ابتدا به پوشه درایور میرویم
1 | cd /sys/class/gpio/ |
حالا باید شماره gpio یی که میخوایم ازش استفاده کنیم رو به این صورت به فایل export بدیم
1 | echo gpio_num > export |
برای برد لیچی پای شماره پینی که میخواید رو به کمک فایل در پوشه های کرنل میتونید پیدا کنید.
"output/build/linux-5.4.92/drivers/pinctrl/sunxi/pinctrl-sunxi.h"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #ifndef __PINCTRL_SUNXI_H #define __PINCTRL_SUNXI_H #include <linux/kernel.h> #include <linux/spinlock.h> #define PA_BASE 0 #define PB_BASE 32 #define PC_BASE 64 #define PD_BASE 96 #define PE_BASE 128 #define PF_BASE 160 #define PG_BASE 192 #define PH_BASE 224 #define PI_BASE 256 #define PL_BASE 352 #define PM_BASE 384 #define PN_BASE 416 |
به طور مثال پین PE11 که به بازر وصل هست شمارش میشه 139، برای تست اون رو اضافه میکنیم
1 | echo 139 > export |
حالا وارد پوشه میشیم، جهت پین رو خروجی قرار میدهیم و وضعیتش را عوض میکنیم.
1 2 3 4 | cd gpio139 echo out > direction echo 1 > value echo 0 > value |
برای این آموزش تا همین حد آشنایی با gpio ها کافیه 🙂
مرحله بعدی لود شدن برنامه پروگرامر بعد از بوت هست، همونطور که میدونید بعد از لود شدن کرنل تنها یک برنامه اجرا میشه که init هست و اون میاد بقیه برنامه ها رو اجرا میکنه، ما توی بیلدروت از busybox init استفاده کردیم و باید اسکریپت خودمون رو به پوشه /etc/init.d/
اضافه کنیم، اسم فایل رو S31Programmer
میزاریم و محتواش رو به این صورت قرار میدهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #!/bin/sh # # Start Programmer.... # export START_BTN=137 export OUT_BUZZER=139 export OUT_RELAY=138 start() { printf "Starting PROGRAMMER: " insmod /root/st7920fb.ko echo $START_BTN > /sys/class/gpio/export echo $OUT_RELAY > /sys/class/gpio/export echo $OUT_BUZZER > /sys/class/gpio/export echo in > /sys/class/gpio/gpio${START_BTN}/direction echo 0 > /sys/class/gpio/gpio${START_BTN}/active_low echo out > /sys/class/gpio/gpio${OUT_RELAY}/direction echo out > /sys/class/gpio/gpio${OUT_BUZZER}/direction start-stop-daemon -S -m -b -p /var/run/flasher.pid -x /root/mtkflasher.py /root/mc60_firmware/MC60_AVLHDR.bin [ $? = 0 ] && echo "OK" || echo "FAIL" } stop() { #cat /dev/urandom > /dev/fb1 printf "Stopping PROGRAMMER: " start-stop-daemon -K -q -p /var/run/flasher.pid /root/display clear [ $? = 0 ] && echo "OK" || echo "FAIL" } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 1 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit $? |
همونطور که میبینید ما :
- ابتدا درایور lcd رو لود کردیم
- پینهای ورودی و خروجی رو اضافه کردیم
- پینها رو مقدار دهی کردیم
- و در نهایت برنامه اصلی رو اجرا کردیم
مرحله آخر هم بحث انتقال فایل پروگرام از طریق usb هست، برای این کار از پکیج uMTPrd استفادهشده که برد رو میتونه بهعنوان یک دستگاه ذخیرهسازی معرفی کنه از طریق usb، این پکیج بهصورت پیشفرض توی کانفیگ ها SINUX F1 فعال هست و نیاز نیست که اضافش کنیم، فقط یک پوشه به نام mc60_firmware در مسیر /root
میسازیم و آدرس اون رو به umtprd میدیم تا این پوشه فقط قابلدسترسی باشه، برای این کار فایل /etc/umtprd/umtprd.conf
رو ویرایش کرده و در این خط مسیر دلخواهمون رو بهش میدیم
1 | storage "/root/mc60_firmware" "firmware" "rw" |
کار تموم هست ، فقط مطمئن بشید که همه این کار ها رو انجام دادید
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | enable packages : -BR2_PACKAGE_PYTHON_SERIAL -BR2_PACKAGE_PYTHON3 files: /root/display /root/mc60_firmware/mt6261_da.bin /root/MC60_AVLHDR.bin /root/mtkflasher.py /etc/init.d/S31Programmer add run permission to files: /root/mtkflasher.py /root/display /etc/init.d/S31Programmer edit file "/etc/init.d/S98uMTPrd" : echo "Sisoog" > strings/0x409/manufacturer echo "programmer" > strings/0x409/product edit file "/etc/umtprd/umtprd.conf" : storage "/root/mc60_firmware" "firmware" "rw" |
امیدوارم که خسته نشده باشید 🙂 . توی این آموزش ما فقط سرنخ ها رو برای یکسری کارها دادیم و باید حتما هر کدوم از مباحث رو دنبالش رو بگیرید و بیشتر باهاش آشنا بشید تا بتونید بهخوبی ازش استفاده کنید.
در ادامه هم میتونید فیلمی از نحوه استفاده از پروگرامر رو بررسی کنید:
خرید پروگرامر ماژول MC60 از فروشگاه سیسوگ
“کار تموم هست ، فقط مطمئن بشید که همه این کار ها رو انجام دادید”
توی جدول انتهایی جای این دوتا فایل اشتباه قرار گرفته یا باید هیمنطوری بزاریم فایل هارو؟
/root/mc60_firmware/mt6261_da.bin
/root/MC60_AVLHDR.bin
این فایل MC60_AVLHDR دوبار تکرار شده
فایل MC60_AVLHDR به اشتباه دوبار تکرار شده و اصلاح شد، این فایل همون فایل اصلی هست که روی ماژول پروگرام میشه و توی پوشه build/gcc در داخل sdk خود openCPU هست. البته اسمش متفاوته و یه چیزی توی این مایه هاست APPGS3MDM32A01.bin
فایل mt6261_da هم نیازه و در گیت هاب قرار گرفته
# ls
display simpleGUI st7920fb.ko
# insmod st7920fb.ko
[ 45.343660] st7920fb: loading out-of-tree module taints kernel.
# ./display clear
-sh: ./display: Permission denied
ارور میده برا تست ال سی دی
یه فایل simpleGUI اضافه داره نسبت به توضیحات شما
باید دسترسی اجرا به فایل display بدید
برای اینکار از این کامند استفاده کنید
chmod +x display
ممنون از پاسخگوییتون
# ./display clear
-sh: ./display: Permission denied
# chmod +x display
# ./display clear
Error: cannot open framebuffer device.
این پیامو میده بعدش
ممنون
فریم بافر رو نمیتونه بازش کنه. فایل fb1 ساخته نمیشه داخل پوشه dev
کجارو باید کانفیگ کرد؟
سلام و درود
ال سی دی استفاده شده از چه نوعی هست؟
چی سرچ بزنم پیدا کنم
سلام. همونطور که در مطلب هم اشاره شده درایور ال سی دی ما st7920 هست و با سرچ اون در موتور جست و جوی آیسی میتونید اون نوع ال سی دی رو خریداری کنید
خیلی ممنونم
من لینوکس کار نکردم، میخوام از ایمیج اماده استفاده کنم، فایل رو با نرم افزار خاصی باید بریزم توی sd card یا همینطوری که بقیه فایلهارو انتقال میدیم انجامش بدم؟
تا چه حافظه ای پشتیبانی میکنه برای sd card، من ۳۲ گیگ خریدم
خواهش میکنم
از نرم افزار win32diskimager هم میتونید توی ویندوز استفاده کنید
نه مثل انتقال فایل معمولی نیست.
یجورایی شبیه بوت کردن فلش برای نصب ویندوز هست اگر آشنایی داشته باشید.
سلام
بعد از اضافه کردن پکیج سریال پایتون و make این ارور میاد.
SyntaxError: invalid syntax
make[1]: *** [package/pkg-generic.mk:269: /home/SinuxF1/New/buildroot-sinux/output/build/python-serial-3.4/.stamp_built] Error 1
ممنون میشم راهنمایی کنین
سلام
برای منم همین ارور میاد
(cd /home/mashroti/buildroot-sinux/output/build/python-serial-3.4//; _PYTHON_SYSCONFIGDATA_NAME=”
{ [ -e /home/mashroti/buildroot-sinux/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/python3.8//_sysconfigdata__linux_*.py ] && basename /home/mashroti/buildroot-sinux/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/python3.8//_sysconfigdata__linux_*.py .py; } || true
” PATH=”/home/mashroti/buildroot-sinux/output/host/bin:/home/mashroti/buildroot-sinux/output/host/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin” PATH=”/home/mashroti/buildroot-sinux/output/host/bin:/home/mashroti/buildroot-sinux/output/host/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin” AR=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-ar” AS=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-as” LD=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-ld” NM=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-nm” CC=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-gcc” GCC=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-gcc” CPP=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-cpp” CXX=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-g++” FC=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-gfortran” F77=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-gfortran” RANLIB=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-ranlib” READELF=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-readelf” STRIP=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-strip” OBJCOPY=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-objcopy” OBJDUMP=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-objdump” AR_FOR_BUILD=”/usr/bin/ar” AS_FOR_BUILD=”/usr/bin/as” CC_FOR_BUILD=”/usr/bin/gcc” GCC_FOR_BUILD=”/usr/bin/gcc” CXX_FOR_BUILD=”/usr/bin/g++” LD_FOR_BUILD=”/usr/bin/ld” CPPFLAGS_FOR_BUILD=”-I/home/mashroti/buildroot-sinux/output/host/include” CFLAGS_FOR_BUILD=”-O2 -I/home/mashroti/buildroot-sinux/output/host/include” CXXFLAGS_FOR_BUILD=”-O2 -I/home/mashroti/buildroot-sinux/output/host/include” LDFLAGS_FOR_BUILD=”-L/home/mashroti/buildroot-sinux/output/host/lib -Wl,-rpath,/home/mashroti/buildroot-sinux/output/host/lib” FCFLAGS_FOR_BUILD=”” DEFAULT_ASSEMBLER=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-as” DEFAULT_LINKER=”/home/mashroti/buildroot-sinux/output/host/bin/arm-buildroot-linux-gnueabi-ld” CPPFLAGS=”-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64″ CFLAGS=”-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os ” CXXFLAGS=”-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os ” LDFLAGS=”” FCFLAGS=” -Os ” FFLAGS=” -Os ” PKG_CONFIG=”/home/mashroti/buildroot-sinux/output/host/bin/pkg-config” STAGING_DIR=”/home/mashroti/buildroot-sinux/output/host/arm-buildroot-linux-gnueabi/sysroot” INTLTOOL_PERL=/usr/bin/perl PYTHONPATH=”/home/mashroti/buildroot-sinux/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/python3.8/” PYTHONNOUSERSITE=1 _python_sysroot=/home/mashroti/buildroot-sinux/output/host/arm-buildroot-linux-gnueabi/sysroot _python_prefix=/usr _python_exec_prefix=/usr /home/mashroti/buildroot-sinux/output/host/bin/python setup.py build )File “/home/mashroti/buildroot-sinux/output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/python3.8/site.py”, line 178
file=sys.stderr)
^
SyntaxError: invalid syntax
make[1]: *** [package/pkg-generic.mk:269: /home/mashroti/buildroot-sinux/output/build/python-serial-3.4/.stamp_built] Error 1
make: *** [Makefile:84: _all] Error 2
متن کاملش اینه
make sisoog_sinux_f1_defconfig
این دستور زدم و درست شد
مطمئنید برای استفاده از qflash باید از ویندوز استفاده کنید؟
مطمئنا میشه توی لینوکس هم از اون استفاده کرد و ما خودمون هم با کمک wine از qflash توی لینوکس استفاده میکنیم. اما مشکل اینجاست که qflash رو نمیشه روی f1c100s بالا آورد 🙂
سلام
اینکه فریمورهای جدید کویکتل تو ایران جواب نمیدن صحت داره؟
سلام کلیت خبر صحیح میباشد
سلام
مثل همیشه عالی بود..
خیلی ارزشمند هست این مطالبی که لطف میکنین و در اختیار همه قرار میدین.
خداقوت
سلام.
خواهش میکنم 🙂