| FLASHROM(8) | flashrom | FLASHROM(8) |
نام (NAME)
flashrom - شناسایی، خواندن، نوشتن، اعتبارسنجی و پاکسازی تراشههای حافظه فلش
خلاصه دستور (SYNOPSIS)
flashrom [-h|-R|-L| -p <programmername>[:<parameters>] [-c <chipname>] (--flash-name|--flash-size| [-E|-x|-r [<file>]|-w [<file>]|-v [<file>]] [(-l <file>|--ifd|--fmap|--fmap-file <file>|--fmap-verify) [-i <include>[:<file>]]] [--wp-status] [--wp-list] [--wp-enable|--wp-disable] [--wp-range <start>,<length>|--wp-region <region>] [-n] [-N] [-f] [--rpmc-root-key <keyfile>] [--key-data <value>] [--counter-address <address>] [--get-rpmc-status] [--write-root-key] [--update-hmac-key] [--increment-counter <current>] [--get-counter])] [-V[V[V]]] [-o <logfile>] [--progress] [--sacrifice-ratio <ratio>] [--read-repeated[=<count>] [<file>]]
توضیحات (DESCRIPTION)
برنامه flashrom ابزاری برای شناسایی، خواندن، نوشتن، اعتبارسنجی و پاکسازی تراشههای حافظه فلش است. این ابزار اغلب برای فلش کردن ایمیجهای BIOS/EFI/coreboot/firmware بهصورت درونسیستمی (in-system) با استفاده از مادربردهای پشتیبانیشده به کار میرود. با این حال، از دستگاههای خارجی گوناگون مبتنی بر PCI/USB/درگاه موازی/درگاه سریال که میتوانند تراشههای فلش را برنامهریزی کنند نیز پشتیبانی میکند؛ از جمله برخی کارتهای شبکه (NIC)، کارتهای کنترلکننده SATA/IDE، کارتهای گرافیک، دستگاه Bus Pirate، دستگاههای USB مختلف مبتنی بر تراشههای FTDI سری FT2232/FT4232H/FT4233H/FT232H و موارد دیگر.
این ابزار از طیف گستردهای از تراشههای DIP32، PLCC32، DIP8، SO8/SOIC8، TSOP32، TSOP40، TSOP48 و BGA پشتیبانی میکند که از پروتکلهای گوناگونی همچون LPC، FWH، فلش موازی یا SPI استفاده میکنند.
گزینهها (OPTIONS)
میتوانید یکی از گزینههای -h، -R، -L، -E، -r، -w، -v، یک دستور RPMC، یا بدون هیچ عملیاتی را مشخص کنید. اگر عملیاتی مشخص نشود، flashrom فقط به بررسی و شناسایی تراشههای فلش میپردازد. توصیه میشود اگر برای نخستین بار flashrom را روی سیستمی اجرا میکنید، آن را در حالت فقط بررسی (probe-only) اجرا کرده و خروجی را بررسی کنید. همچنین توصیه میشود پیش از تلاش برای نوشتن یک ایمیج جدید، با گزینه -r از محتوای فعلی رام نسخه پشتیبان تهیه کنید. تمام عملیاتی که شامل هرگونه دسترسی به تراشه میشوند (بررسی/خواندن/نوشتن/...) نیازمند استفاده از گزینه -p/--programmer هستند (لطفاً به توضیحات زیر مراجعه کنید).
- -r, --read [<file>]
- محتوای
حافظه رام
فلش را
خوانده و در
<file>
مشخصشده
ذخیره
میکند. اگر
فایل از قبل
موجود
باشد،
بازنویسی
خواهد شد.
پارامتر <file> در اینجا الزامی است مگر اینکه خواندن با پارامتر -i/--include به یک یا چند ناحیه فلش محدود شده و فایل در آنجا مشخص شده باشد. برای دیدن مثالها به بخش --include در ادامه مراجعه کنید.
- -w, --write (<file>|-)
- فایل <file> را
درون حافظه
رام فلش
مینویسد.
اگر بهجای
آن - داده
شود، محتوا
از ورودی
استاندارد
(stdin) خوانده
خواهد شد.
این عمل
ابتدا
تراشه را
بهطور
خودکار
پاکسازی
کرده و سپس
روی آن
مینویسد.
در طول این فرآیند، تراشه چندین بار نیز خوانده میشود. نخست یک پشتیبان درون حافظه برای بازیابی در صورت بروز فاجعه و همچنین صرفنظر کردن از نواحیای که از پیش با فایل ایمیج یکسان هستند تهیه میشود. این رونوشت همگام با عملیات نوشتن بهروزرسانی میشود. در صورت بروز خطای پاکسازی، حتی ممکن است مجدداً بهطور کامل بازخوانی شود. پس از پایان نوشتن و در صورت فعال بودن اعتبارسنجی، کل تراشه فلش خوانده شده و با ایمیج ورودی مقایسه میشود.
پارامتر <file> در اینجا الزامی است مگر اینکه نوشتن با پارامتر -i/--include به یک یا چند ناحیه فلش محدود شده و فایل در آنجا مشخص شده باشد. برای دیدن مثالها به بخش --include در ادامه مراجعه کنید.
- -n, --noverify
- از
اعتبارسنجی
خودکار
محتوای
حافظه رام
فلش پس از
نوشتن یا
پاکسازی
صرفنظر
میکند.
استفاده از
این گزینه
توصیه
نمیشود؛
تنها در
صورتی باید
از آن
استفاده
کنید که به
کاری که
انجام
میدهید
آگاه باشید
و احساس
کنید زمان
اعتبارسنجی
بیش از حد
طولانی است.
کاربرد معمول:
flashrom -p prog -n -w <file>
این گزینه فقط در ترکیب با --write یا --erase کاربرد دارد.
- -N, --noverify-all
- هنگام
اعتبارسنجی
خودکار پس
از نوشتن،
از نواحی
لحاظنشده
صرفنظر
میکند
(مقایسه
کنید با -l و
-i). تنها
زمانی باید
از این
گزینه
استفاده
کنید که
مطمئن
باشید
ارتباط با
تراشه فلش
قابل
اعتماد است
(برای نمونه
هنگام
استفاده از
پروگرامر
internal). حتی اگر
به flashrom دستور
داده شود
بخشهایی
از تراشه
فلش را
دستنخورده
باقی
بگذارد،
محتوای
آنها ممکن
است آسیب
ببیند (برای
مثال به
دلیل تفسیر
نادرست
دستورات
پاکسازی).
این گزینه برای فلش کردن یک سیستم اینتل دارای ناحیه فلش ME قفلشده با استفاده از پروگرامر internal الزامی است. ممکن است در آینده در چنین حالتی بهصورت پیشفرض فعال شود.
- -v, --verify (<file>|-)
- محتوای
حافظه رام
فلش را در
برابر فایل
دادهشده
<file>
اعتبارسنجی
میکند. اگر
بهجای آن -
داده شود،
محتوا در
خروجی
استاندارد
نوشته
خواهد شد.
پارامتر <file> در اینجا الزامی است مگر اینکه اعتبارسنجی با پارامتر -i/--include به یک یا چند ناحیه فلش محدود شده و فایل در آنجا مشخص شده باشد. برای دیدن مثالها به بخش --include در ادامه مراجعه کنید.
- -E, --erase
- تراشه حافظه رام فلش را پاکسازی میکند.
- -x, --extract
- تمامی نواحی تعریفشده در چیدمان را از تراشه حافظه رام فلش در فایلی با همان نام ناحیه استخراجشده (با جایگزینی فاصلهها با خط زیرین) استخراج میکند.
- -V, --verbose
- خروجی با جزئیات بیشتر. این گزینه میتواند چندین بار (حداکثر ۳ بار، یعنی -VVV) برای دریافت خروجی خطایابی بیشتر مشخص شود.
- -c, --chip <chipname>
- فقط برای تراشه حافظه رام فلش مشخصشده بررسی انجام میدهد. این گزینه نام تراشه را همانطور که توسط flashrom -L بدون نام سازنده چاپ میشود بهعنوان پارامتر دریافت میکند. لطفاً توجه داشته باشید که نام تراشه به حروف بزرگ و کوچک حساس است.
- -f, --force
- اجبار یک یا چند مورد از اقدامات زیر:
- اجبار به خواندن تراشه و وانمود کردن به اینکه تراشه حضور دارد.
- اجبار به دسترسی به تراشه حتی اگر اندازه تراشه از حداکثر اندازه پشتیبانیشده برای گذرگاه فلش بزرگتر باشد.
- اجبار به پاکسازی حتی در صورت معیوب بودن شناختهشده پاکسازی.
- اجبار به نوشتن حتی در صورت معیوب بودن شناختهشده نوشتن.
- -l, --layout <file>
- چیدمان رام
را از <file>
میخواند.
برنامه flashrom از چیدمانهای رام پشتیبانی میکند. این قابلیت به شما امکان میدهد تنها بخشهای مشخصی از تراشه فلش را فلش کنید. یک فایل چیدمان رام شامل چندین خط با ساختار دستوری زیر است:
startaddr:endaddr imagename
مقدارهای startaddr و endaddr آدرسهای هگزادسیمال درون فایل رام هستند و به هیچ آدرس فیزیکی اشاره نمیکنند. لطفاً توجه داشته باشید که استفاده از پیشوند 0x برای این اعداد هگزادسیمال ضروری نیست، اما نمیتوانید اعداد دهدهی/هشتهشتی مشخص کنید. مقدار imagename یک نام دلخواه برای ناحیه/ایمیج از startaddr تا endaddr (شامل هر دو آدرس) است.
مثال:
00000000:00008fff gfxrom 00009000:0003ffff normal 00040000:0007ffff fallback
اگر فقط میخواهید ایمیج با نام normal را در یک رام بر اساس چیدمان بالا بهروزرسانی کنید، اجرا کنید:
flashrom -p prog --layout rom.layout --image normal -w some.rom
برای بهروزرسانی تنها ایمیجهای با نام normal و fallback، اجرا کنید:
flashrom -p prog -l rom.layout -i normal -i fallback -w some.rom
بخشهای دارای همپوشانی پشتیبانی نمیشوند.
- --fmap
- چیدمان را
از fmap موجود
در تراشه
فلش
میخواند.
برنامه flashrom از قالب دودویی fmap که معمولاً توسط coreboot برای پارتیشنبندی تراشه فلش استفاده میشود، پشتیبانی میکند. نقشه fmap روی تراشه خوانده شده و برای ایجاد چیدمان به کار میرود.
اگر فقط میخواهید ناحیه COREBOOT تعریفشده در fmap را بهروزرسانی کنید، اجرا کنید:
flashrom -p prog --fmap --image COREBOOT -w some.rom
- --fmap-file <file>
- چیدمان را
از یک <file>
حاوی fmap
دودویی
(مانند
رامهای coreboot)
میخواند.
برنامه flashrom از قالب دودویی fmap که معمولاً توسط coreboot برای پارتیشنبندی تراشه فلش استفاده میشود، پشتیبانی میکند. نقشه fmap موجود در فایل مشخصشده خوانده شده و برای ایجاد چیدمان به کار میرود.
اگر فقط میخواهید ناحیه COREBOOT تعریفشده در فایل fmap دودویی را بهروزرسانی کنید، اجرا کنید:
flashrom -p prog --fmap-file some.rom --image COREBOOT -w some.rom
- --fmap-verify
- چیدمان رام
را از fmap
جاسازیشده
در رام
خوانده و
مطابقت آن
با fmap موجود
در فایل
مورد نظر
برای نوشتن
را
اعتبارسنجی
میکند.
این گزینه با گزینههای --fmap، --fmap-file، --layout و --ifd ناسازگار (مانعةالجمع) است. تنها میتواند با عملیات نوشتن استفاده شود، زیرا در غیر این صورت معنایی ندارد. پیش از نوشتن، flashrom نقشه fmap را هم از تراشه فلش و هم از فایل مورد نظر برای نوشتن خوانده و سپس آنها را مقایسه میکند. اگر نقشههای fmap مطابقت نداشته باشند، عملیات نوشتن متوقف خواهد شد.
این گزینه برای جلوگیری از نوشتن تصادفی یک ایمیج رام با چیدمان ناسازگار روی تراشه فلش مفید است.
اگر فقط میخواهید ناحیه COREBOOT تعریفشده در fmap را بهروزرسانی کرده و از مطابقت fmap اطمینان حاصل کنید، اجرا کنید:
flashrom -p prog --fmap-verify -w new.rom --image COREBOOT
- --ifd
- چیدمان رام
را از
توصیفگر
سفتافزار
اینتل (Intel Firmware Descriptor
یا IFD)
میخواند.
برنامه flashrom از چیدمانهای رامی که توسط توصیفگر سفتافزار اینتل (IFD) ارائه میشوند پشتیبانی میکند. توصیفگر روی تراشه خوانده شده و برای تولید چیدمان به کار میرود. اگر نیاز به تغییر چیدمان داشته باشید، ابتدا باید منحصراً IFD را بهروزرسانی کنید.
ایمیجهای رام زیر ممکن است در یک IFD وجود داشته باشند:
fd - خود IFD bios - سفتافزار میزبان با نام مستعار BIOS me - سفتافزار Intel Management Engine gbe - سفتافزار اترنت گیگابیت pd - دادههای ویژهی پلتفرم
- -i, --include <region>[:<file>]
- فقط ناحیه
<region> را از
رام
خوانده، در
آن نوشته،
یا
اعتبارسنجی
میکند. در
صورتی که
کاربر
بخواهد
چندین
ناحیه را با
یک دستور
بخواند،
بنویسد یا
اعتبارسنجی
کند، گزینه
-i میتواند
چندین بار
استفاده
شود.
کاربر میتواند به صورت اختیاری برای هر ناحیهای که قصد خواندن یا نوشتن آن را دارد، یک <file> متناظر مشخص کند. عملیات خواندن، نواحی متناظر را از رام خوانده و برای هر یک، فایلهای جداگانهای مینویسد. گزینه نوشتن، فایل(ها) را خوانده و در ناحیه(های) متناظر در رام مینویسد.
برای تمام عملیات خواندن/نوشتن/اعتبارسنجی، پارامتر <file> پس از آن عملیات اختیاری شده و در صورت حضور، هر زمان که <file> پس از ناحیه مشخص شده باشد نادیده گرفته میشود.
قوانین مشترک برای تجزیه نگارشی -r/-w/-v:
- اگر هیچ نام فایلی مشخص نشده باشد، خارج میشود.
- اگر فایلی برای -r/-w/-v مشخص شده باشد و هیچ فایلی همراه با شناسههای -i تعیین نشده باشد (یا از -i استفاده نشده باشد)، آن فایل برای خواندن/نوشتن/اعتبارسنجی کل رام استفاده خواهد شد.
- اگر هیچ نام فایلی برای -r/-w/-v مشخص نشده باشد، اما فایلهایی برای -i مشخص شده باشند، شمار آرگومانهای فایل برای گزینههای -i باید برابر با تعداد کل گزینههای -i باشد.
قوانین خواندن:
- اگر فایلهایی برای آرگومانهای -i مشخص شده باشند اما برای -r مشخص نشده باشند، خواندن جزئی برای هر آرگومان -i انجام شده و برای هر ناحیه یک فایل جدید ایجاد میشود. هر گزینه -i باید یک نام فایل را مشخص کند.
- اگر نام فایلها هم برای -r و هم برای آرگومانهای -i مشخص شده باشند، در این صورت:
- خواندن جزئی برای هر آرگومان -i انجام داده و برای هر ناحیهای که نام فایلی برای آن فراهم شده یک فایل جدید ایجاد میکند (-i region:filename).
- فایلی به اندازه رام با محتوای تا حدی پرشده ایجاد میکند. برای هر آرگومان -i، آفست متناظر با محتوای خواندهشده از رام پر میشود.
قوانین نوشتن و اعتبارسنجی:
- اگر فایلها هم برای آرگومانهای -w/-v و هم برای آرگومانهای -i مشخص شده باشند، فایلهای -i اولویت دارند (فایلهای مشخصشده برای -w/-v استفاده نمیشوند).
- اگر فایلها برای آرگومانهای -i مشخص شده باشند اما برای -w مشخص نشده باشند، نوشتن جزئی برای هر آرگومان -i انجام میشود. به همین ترتیب برای آرگومانهای -v و -i. همه آرگومانهای -i باید یک نام فایل ارائه دهند. هرگونه کوتاهی مبهم در نظر گرفته میشود.
- نواحی مرتبط با یک نام فایل نباید همپوشانی داشته باشند. این حالت نیز مبهم تلقی میشود. نکته: این مورد بعداً بررسی میشود زیرا ابتدا مستلزم پردازش چیدمان/fmap است.
- مثالها:
- برای خواندن نواحی با نامهای foo و bar در فایل چیدمان <layout> در فایلهایی به اندازه همان ناحیه با نامهای foo.bin و bar.bin، اجرا کنید:
flashrom -p prog -r -l <layout> -i foo:foo.bin -i bar:bar.bin
برای نوشتن فایلهای foo.bin و bar.bin در نواحی با نامهای foo و bar در فایل چیدمان <layout> روی رام، اجرا کنید:
flashrom -p prog -w -l <layout> -i foo:foo.bin -i bar:bar.bin
برای اعتبارسنجی نواحی با نامهای foo و bar با استفاده از فایل چیدمان <layout> و فایلهای foo.bin و bar.bin، اجرا کنید:
flashrom -p prog -v -l <layout> -i foo:foo.bin -i bar:bar.bin
- --wp-status
- حالت حفاظت از ثبات وضعیت (status register) و محدوده حفاظت از نوشتن فعلی فلش را چاپ میکند.
- --wp-list
- فهرستی از تمام محدودههای حفاظتی که حافظه فلش پشتیبانی میکند را چاپ میکند.
- --wp-enable
- در صورت پشتیبانی فلش، حفاظت سختافزاری از ثبات وضعیت (SRP) را فعال میکند. پس از فعال شدن SRP، عملیاتی که ثباتهای وضعیت فلش را تغییر میدهند (از جمله --wp-disable و --wp-range) تنها در صورتی قابل انجام هستند که پایه #WP فلش در سطح منطقی غیرفعال باشد.
- --wp-disable
- در صورت مجاز بودن توسط فلش، حفاظت از ثبات وضعیت را غیرفعال میکند.
- --wp-range <start>,<length>
- فلش را برای محافظت از محدودهای از آدرسها از <start> تا (<start> + <length> - 1) (با احتساب دو سر بازه) پیکربندی میکند. این محدوده باید توسط فلش پشتیبانی شود؛ به --wp-list مراجعه کنید.
- --wp-region <region>
- مشابه با --wp-range است اما از محدودهای که توسط یک ناحیه ایمیج اشغال شده محافظت میکند. این گزینه نیازمند مشخص شدن چیدمان ایمیج است؛ به --layout مراجعه کنید. این ناحیه باید توسط فلش پشتیبانی شود؛ به --wp-list مراجعه کنید.
- --flash-name
- نام تراشه فلش شناساییشده را چاپ میکند.
- --flash-size
- اندازه تراشه فلش شناساییشده را چاپ میکند.
- --flash-contents <ref-file>
- محتوای فایل <ref-file> برای تصمیمگیری در مورد اینکه کدام بخشهای فلش نیاز به نوشتن دارند استفاده خواهد شد. ارائه این فایل از خواندن اولیه کل تراشه فلش صرفهجویی میکند. مراقب باشید؛ اگر دادههای ارائهشده با محتوای واقعی فلش مطابقت نداشته باشد، نتایج نامشخص خواهد بود.
- -L, --list-supported
- تراشههای
حافظه فلش،
چیپستها،
مادربردها
و
پروگرامرهای
خارجی (از
جمله
دستگاههای
مبتنی بر PCI،
USB، درگاه
موازی و
درگاه
سریال)
پشتیبانیشده
توسط flashrom را
فهرست
میکند.
بردهای فهرستنشده بسیاری وجود دارند که بدون نیاز به پشتیبانی ویژه در flashrom بهطور پیشفرض کار خواهند کرد. لطفاً اگر توانستید کارکرد یا عدم کارکرد بردهای دیگر را بررسی و تأیید کنید، به ما اطلاع دهید.
مهم: برای اعتبارسنجی باید عملیات پاکسازی (ERASE) و/یا نوشتن (WRITE) را آزمایش کنید، بنابراین مطمئن شوید تنها در صورتی این کار را انجام میدهید که راهکار مناسب برای بازیابی در صورت بروز خرابی را در اختیار داشته باشید!
- -p, --programmer <name>[:parameter[,parameter[,parameter]]]
- دستگاه پروگرامر را مشخص میکند. این گزینه برای تمام عملیاتی که شامل هرگونه دسترسی به تراشه هستند (بررسی/خواندن/نوشتن/...) الزامی است. موارد پشتیبانیشده در حال حاضر عبارتند از:
- internal (برای فلش کردن درونسیستمی روی مادربرد)
- dummy (پروگرامر مجازی برای آزمایش flashrom)
- fault (پوسته تزریق خطا برای آزمایش)
- nic3com (برای حافظههای رام فلش روی کارتهای شبکه 3COM)
- nicrealtek (برای حافظههای رام فلش روی کارتهای شبکه Realtek و SMC 1211)
- nicnatsemi (برای حافظههای رام فلش روی کارتهای شبکه National Semiconductor DP838*)
- nicintel (برای حافظههای رام فلش موازی روی کارتهای شبکه Intel 10/100Mbit)
- gfxnvidia (برای حافظههای رام فلش روی کارتهای گرافیک NVIDIA)
- drkaiser (برای حافظههای رام فلش روی کارتهای PCI از نوع Dr. Kaiser PC-Waechter)
- satasii (برای حافظههای رام فلش روی کنترلکنندههای Silicon Image SATA/IDE)
- satamv (برای حافظههای رام فلش روی کنترلکنندههای Marvell SATA)
- atahpt (برای حافظههای رام فلش روی کنترلکنندههای Highpoint ATA/RAID)
- atavia (برای حافظههای رام فلش روی کنترلکنندههای VIA VT6421A SATA)
- atapromise (برای حافظههای رام فلش روی کنترلکنندههای Promise PDC2026x ATA/RAID)
- it8212 (برای حافظههای رام فلش روی کنترلکننده ITE IT8212F ATA/RAID)
- ft2232_spi (برای حافظههای رام فلش SPI متصل به پروگرامر USB SPI مبتنی بر خانواده FT2232/FT4232H/FT232H)
- serprog (برای حافظههای رام فلش متصل به پروگرامری که با پروتکل serprog ارتباط برقرار میکند، شامل برخی دستگاههای مبتنی بر آردوینو)
- buspirate_spi (برای حافظههای رام فلش SPI متصل به Bus Pirate)
- dediprog (برای حافظههای رام فلش SPI متصل به Dediprog SF100)
- rayer_spi (برای حافظههای رام فلش SPI متصل به درگاه موازی از طریق یکی از انواع کابلها)
- raiden_debug_spi (برای ابزارهای خطایابی مبتنی بر Chrome EC مانند SuzyQable، Servo V4، C2D2 و uServo)
- pony_spi (برای حافظههای رام فلش SPI متصل به آداپتور بیتبنگینگ درگاه سریال SI-Prog)
- nicintel_spi (برای حافظههای رام فلش SPI روی کارتهای شبکه اینتل گیگابیت)
- ogp_spi (برای حافظههای رام فلش SPI روی کارت گرافیک Open Graphics Project)
- linux_mtd (برای حافظههای رام فلش SPI قابل دسترس از طریق dev/mtdX/ در لینوکس)
- linux_spi (برای حافظههای رام فلش SPI قابل دسترس از طریق dev/spidevX.Y/ در لینوکس)
- usbblaster_spi (برای حافظههای رام فلش SPI متصل به کابل سازگار با Altera USB-Blaster)
- nicintel_eeprom (برای EEPROMهای SPI روی کارتهای شبکه اینتل گیگابیت)
- mstarddc_spi (برای حافظههای رام فلش SPI قابل دسترس از طریق DDC در نمایشگرهای مجهز به MSTAR)
- pickit2_spi (برای حافظههای رام فلش SPI قابل دسترس از طریق Microchip PICkit2)
- ch341a_spi (برای حافظههای رام فلش SPI متصل به WCH CH341A)
- ch347_api (برای حافظههای رام فلش SPI متصل به WHC CH347)
- digilent_spi (برای حافظههای رام فلش SPI متصل به بردهای توسعه iCEblink40)
- jlink_spi (برای حافظههای رام فلش SPI متصل به دستگاههای SEGGER J-Link و سازگار با آن)
- ni845x_spi (برای حافظههای رام فلش SPI متصل به National Instruments USB-8451 یا USB-8452)
- stlinkv3_spi (برای حافظههای رام فلش SPI متصل به دستگاههای STMicroelectronics STLINK V3)
- realtek_mst_i2c_spi (برای حافظههای رام فلش SPI متصل به هابهای Realtek DisplayPort قابل دسترس از طریق I2C)
- parade_lspcon (برای حافظههای رام فلش SPI متصل به تراشههای Parade Technologies LSPCON (PS175))
- mediatek_i2c_spi (برای حافظههای رام فلش SPI متصل به برخی دستگاههای نمایشگر مدیاتک قابل دسترس روی I2C)
- dirtyjtag_spi (برای حافظههای رام فلش SPI متصل به دستگاههای سازگار با DirtyJTAG)
- asm106x (برای حافظههای رام فلش SPI متصل به کنترلکنندههای asm106x PCI SATA)
- spidriver (برای حافظههای رام فلش SPI متصل به Excamera Labs SPIDriver)
- nv_sma_spi (برای حافظههای رام فلش SPI متصل به Nvidia System Management Agent)
برخی پروگرامرها پارامترهای اختیاری یا اجباری دارند که در بخش اطلاعات مربوط به پروگرامر (PROGRAMMER-SPECIFIC INFORMATION) به تفصیل شرح داده شدهاند. پشتیبانی از برخی پروگرامرها میتواند در زمان کامپایل غیرفعال شود. دستور flashrom -h تمام پروگرامرهای پشتیبانیشده را فهرست میکند.
- -h, --help
- متن راهنما را نشان داده و خارج میشود.
- -o, --output <logfile>
- گزارش کامل خطایابی را در <logfile> ذخیره میکند. اگر فایل از پیش موجود باشد، بازنویسی خواهد شد. این روش پیشنهادی برای جمعآوری گزارشها از flashrom است، چرا که پیامها حتی اگر پیامهای روی صفحه پرجزئیات نباشند، با جزئیات کامل ذخیره شده و نیازی به تغییر مسیر خروجی ندارند.
- --progress
- درصد پیشرفت عملیات را در خروجی استاندارد نشان میدهد.
- --sacrifice-ratio <ratio>
- کسری (به
صورت درصد،
۰ تا ۵۰) از
یک بلوک
پاکسازی
که حتی در
صورت عدم
تغییر ممکن
است
پاکسازی
شود. مقادیر
بزرگتر
ممکن است
برنامهریزی
را سریعتر
به پایان
برسانند،
اما همچنین
ممکن است با
پاکسازی
غیرضروری
سلولها،
طول عمر
تراشه را
کاهش دهند.
پیشفرض 0 است؛ یعنی بلوک با اندازه S+1 تنها زمانی انتخاب میشود که تمام بلوکهای با اندازه S درون آن نیاز به پاکسازی کامل داشته باشند. مقدار 50 به این معناست که اگر بیش از نیمی از ناحیه نیاز به پاکسازی داشته باشد، یک بلوک با اندازه S+1 میتواند برای پوشش دادن کل ناحیه با یک بار پاکسازی انتخاب شود. این موازنه میان سرعت عملیات برنامهریزی در برابر طول عمر تراشه است. حالت پیشفرض، حفظ طول عمر است.
خطرناک! این کار تراشه شما را سریعتر مستهلک میکند!
- --read-repeated [=<count>] [<file>]
- تراشه فلش
را به تعداد
<count> بار
(پیشفرض:
۳، حداقل:
۳، حداکثر:
۱۰۰)
میخواند و
از
رأیگیری
اکثریت
برای تشخیص
اتصالات
ناپایدار
استفاده
میکند. یک
اکثریت
قاطع (بیش
از نیمی از
کل دفعات
خواندن)
باید
همنظر
باشند تا
نتیجه قابل
اعتماد
باشد. تساوی
بین دو گروه
محتوا به
عنوان شکست
در نظر
گرفته
میشود.
گزارش X/N reads matched را چاپ میکند. اگر همه دفعات خواندن یکسان باشند، اتصال پایدار اعلام میشود؛ اگر اکثریت موافق باشند اما نه همه، یک هشدار ناپایداری (flakiness) چاپ میشود. اگر اکثریتی یافت نشود، عملیات با خطا شکست میخورد.
اگر <file> داده شده باشد و اکثریت یافت شود، محتوای اکثریت در آن فایل ذخیره میشود. بدون <file>، این گزینه تنها به عنوان بررسی پایداری اتصال عمل میکند.
نمیتواند با -r، -w، -E یا -v ترکیب شود.
این گزینه حافظهای متناسب با تعداد نتایج متمایز خواندن (نه تعداد کل) اختصاص میدهد. در یک اتصال پایدار تنها یک نسخه از محتوای فلش نگهداری میشود. در اتصالات ناپایدار با نتایج منحصربهفرد بسیار، مصرف حافظه ممکن است قابل توجه باشد و این گزینه ممکن است برای محیطهایی با رم بسیار محدود مناسب نباشد.
مثالها:
flashrom -p <programmer> --read-repeated flashrom -p <programmer> --read-repeated=5 flashrom -p <programmer> --read-repeated=5 dump.bin
- -R, --version
- اطلاعات نسخه را نشان داده و خارج میشود.
دستورات RPMC (RPMC commands)
این بخش دستورات اضافهشده در JESD260 را شرح میدهد. این دستورات تنها روی مدلهای خاصی از تراشهها پشتیبانی میشوند. اگر تراشه به درستی شناسایی شده است اما همچنان خطای Error: RPMC commands are not supported on this device را دریافت میکنید، از -c "SFDP-capable chip" برای تشخیص خودکار ویژگیها استفاده کنید.
- --get-rpmc-status
- وضعیت
گسترشیافته
RPMC را با صدور
دستور OP2
میخواند.
مثال:
flashrom -p prog --get-rpmc-status
- --write-root-key
- کلید ریشه (root
key) جدید را از
فایل --rpmc-root-key
برای --counter-address
مینویسد.
مثال:
flashrom -p prog --rpmc-root-key <keyfile> --counter-address <address> --write-root-key
- --update-hmac-key
- ثبات کلید hmac
را برای --counter-address
با مقدار
دادهشده
--key-data
بهروزرسانی
میکند.
نیازمند
--rpmc-root-key معتبر
است.
مثال:
flashrom -p prog --rpmc-root-key <keyfile> --counter-address <address> --key-data <value> --update-hmac-key
- --increment-counter <current>
- شمارنده را
در --counter-address به
میزان یک
واحد بیشتر
از <current>
افزایش
میدهد.
نیازمند --key-data
از پیش
بهروزرسانیشده
و --rpmc-root-key معتبر
است.
مثالها:
flashrom -p prog --rpmc-root-key <keyfile> --counter-address <address> --key-data <value> --increment-counter 12 flashrom -p prog --rpmc-root-key <keyfile> --counter-address <address> --key-data <value> -w rom.bin --update-hmac-key --increment-counter 25
- --get-counter
- مقدار فعلی
شمارنده را
برای --counter-address
دریافت
میکند.
نیازمند --key-data
از پیش
بهروزرسانیشده
و --rpmc-root-key معتبر
است.
مثالها:
flashrom -p prog --rpmc-root-key <keyfile> --counter-address <address> --key-data <value> --get-counter flashrom -p prog --rpmc-root-key <keyfile> --counter-address <address> --key-data <value> --update-hmac-key --get-counter
گزینههای RPMC (RPMC options)
- --counter-address <address>
- شمارنده را
در <address> برای
تمام
عملیات RPMC
هدف قرار
میدهد.
آدرسدهی
از 0 آغاز
میشود.
پیشفرض 0
است.
مثال:
flashrom --counter-address 2
- --rpmc-root-key <keyfile>
- از <keyfile> به
عنوان مکان
کلید ریشه
۳۲ بایتی
استفاده
میکند.
مثال:
flashrom --rpmc-root-key /home/user/some_key.bin
- --key-data <value>
- مقدار
هگزادسیمال
<value> به
عنوان داده
کلید ۴
بایتی در
عملیات RPMC
استفاده
خواهد شد.
پیشفرض 0
است.
مثال:
flashrom --key-data 12abc
اطلاعات ویژه پروگرامر (PROGRAMMER-SPECIFIC INFORMATION)
برخی از درایورهای پروگرامر پارامترهای بیشتری را برای تنظیم پارامترهای ویژه پروگرامر میپذیرند. این پارامترها با دونقطه (:) از نام پروگرامر جدا میشوند. در حالی که برخی از پروگرامرها آرگومانها را در موقعیتهای ثابت دریافت میکنند، پروگرامرهای دیگر از یک واسط کلید/مقدار استفاده میکنند که در آن کلید و مقدار با علامت مساوی (=) از هم جدا شده و جفتهای مختلف با کاما یا دونقطه از یکدیگر تفکیک میشوند.
پروگرامر داخلی (internal programmer)
- فعالسازهای مادربرد (Board Enables)
- برخی از بردهای اصلی برای فعالسازی پشتیبانی از پاکسازی و نوشتن فلش (و پشتیبانی از کاوش در سیستمهای قدیمی با فلش موازی)، نیازمند اجرای کد ویژه برد اصلی هستند. سازنده و مدل برد اصلی (در صورتی که نیازمند کد ویژه باشد) معمولاً با استفاده از یکی از سازوکارهای زیر به طور خودکار شناسایی میشود: اگر سیستم شما از coreboot استفاده میکند، نوع برد اصلی از جدول coreboot مشخص میشود. در غیر این صورت، برد اصلی با بررسی دستگاههای PCI روی برد و احتمالاً اطلاعات DMI شناسایی میشود. اگر اطلاعات PCI و DMI حاوی دادههای لازم برای شناسایی یکتای برد اصلی نباشد (که این یک استثنا است)، یا اگر بخواهید مدل شناساییشده برد اصلی را بازنویسی کنید، میتوانید برد اصلی را با استفاده از ساختار دستوری:
flashrom -p internal:mainboard=<vendor>:<board>
مشخص کنید.
برای مشاهده فهرستی از بردهایی که در صورت پیدا نشدن جدول coreboot نیازمند مشخص کردن نام برد هستند، بخش Known boards یا Known laptops را در خروجی flashrom -L ببینید.
برخی از این توابع فعالسازی فلش ویژه مادربرد (به نام board enables یا فعالسازهای مادربرد) در flashrom هنوز آزمایش نشدهاند. اگر مادربرد شما شناسایی شود و به یک تابع فعالساز مادربردِ آزمایشنشده نیاز داشته باشد، پیام هشداری چاپ شده و فعالساز مادربرد اجرا نمیشود، زیرا یک تابع فعالساز مادربرد اشتباه میتواند باعث رفتارهای پیشبینینشده در سیستم شود؛ چون توابع فعالساز مادربرد با بخشهای درونی سطح پایین مادربرد در ارتباط هستند. عدم اجرای تابع فعالساز مادربرد (در صورتی که به آن نیاز باشد) ممکن است باعث شکست در شناسایی یا پاکسازی شود. اگر برد شما فقط از بخشی از فلش محافظت میکند (معمولاً بخش انتهایی بالایی که بلوک بوت نامیده میشود)، flashrom ممکن است تنها پس از پاکسازی بخش محافظتنشده با خطا روبرو شود؛ بنابراین اجرا بدون تابع فعالساز مادربرد میتواند برای عملیات پاکسازی و نوشتن (که شامل پاکسازی نیز میشود) خطرناک باشد.
روش پیشنهادی برای یک برد اصلی با کد ویژه مادربرد آزمایشنشده این است که ابتدا کاوش ROM را بدون اجرای کد فعالساز مادربرد (یعنی بدون هیچ پارامتری، صرفاً با اجرای flashrom و بررسی اینکه آیا نوع تراشه فلش شما شناسایی میشود یا خیر) امتحان کنید. اگر تراشه شما شناسایی شد، بسیار خوب است. در غیر این صورت، کاوش تراشه خود را با اجرای کد فعالساز مادربرد و با استفاده از دستور:
flashrom -p internal:boardenable=force
مجدداً امتحان کنید. اگر تراشه شما همچنان شناسایی نشد، به نظر میرسد کد فعالساز مادربرد خراب است یا تراشه فلش پشتیبانی نمیشود. در غیر این صورت، از محتویات فعلی ROM خود یک نسخه پشتیبان تهیه کرده (با استفاده از -r) و آن را در رسانهای خارج از رایانه خود، مانند یک فلشدرایو USB یا یک اشتراک شبکه ذخیره کنید. اگر برای کاوش اولیه به اجرای کد فعالساز مادربرد نیاز داشتید، برای خواندن نیز از آن استفاده کنید. اگر خواندن با موفقیت انجام شد و محتویات فایل خواندهشده درست به نظر رسید، میتوانید برای نوشتن ایمیج جدید اقدام کنید. در این مرحله در هر صورت باید کد فعالساز مادربرد را فعال کنید، زیرا این کد به این دلیل نوشته شده که مشخص است نوشتن/پاکسازی بدون فعالساز مادربرد شکست خواهد خورد. در هر صورت (موفقیت یا شکست)، لطفاً نتیجه را به لیست پستی flashrom گزارش دهید (به بخش زیر مراجعه کنید).
- Linux MTD
- در
پلتفرمهای
اینتل،
درایور spi-intel
کرنل،
کنترلر فلش
PCH را تصاحب
کرده و
حافظه فلش
را به عنوان
یک دستگاه MTD
در دسترس
قرار
میدهد.
پروگرامر
داخلی در
صورت وجود
این
دستگاه، به
جای
برقراری
ارتباط
مستقیم با
خود چیپست،
از این
دستگاه
استفاده
کرده و این
موضوع را
گزارش
میدهد.
این مسیر نسبت به دسترسی مستقیم به چیپست محدودتر است. نواحی گرفتهشده از توصیفگر فلش (flash descriptor)، مدیریت بازههای محافظتشده و حفاظت از نوشتن تراشه در دسترس نیستند؛ و بازههایی که کنترلر از خواندن آنها امتناع میکند باعث شکست کل عملیات میشوند، مگر اینکه از linux_mtd:ignore_read_errors=yes استفاده شود. برای استفاده از مسیر چیپست به جای آن، اتصال درایور را از کنترلر قطع کنید (unbind) که در چیپستهای فعلی در آدرس 00:1f.5 قرار دارد:
echo 0000:00:1f.5 > /sys/bus/pci/drivers/intel-spi/unbind
توجه داشته باشید که انجام این کار، حفاظتهایی را که درایور کرنل اعمال میکند لغو مینماید.
- Coreboot
- در سیستمهایی که coreboot اجرا میکنند، flashrom بررسی میکند که آیا ایمیج مورد نظر با مادربرد شما مطابقت دارد یا خیر. این کار مستلزم وجود یک شناسه ویژه برد (board ID) در ایمیج است. اگر flashrom تشخیص دهد که ایمیجی که میخواهید بنویسید با برد فعلی همخوانی ندارد، از نوشتن ایمیج خودداری میکند مگر اینکه دستور زیر را مشخص کنید:
flashrom -p internal:boardmismatch=force
- ITE IT87 Super I/O
- اگر مادربرد شما توسط گیگابایت (GIGABYTE) ساخته شده و از DualBIOS پشتیبانی میکند، به احتمال بسیار زیاد از یک تراشه Super I/O سری ITE IT87 برای جابجایی بین دو تراشه فلش استفاده میکند. در هر لحظه فقط یکی از آنها قابل دسترسی است و شما میتوانید به صورت دستی با استفاده از ساختار:
flashrom -p internal:dualbiosindex=chip
تراشه مورد نظر را انتخاب کنید که در آن chip شاخص تراشه مورد استفاده است (0 = اصلی یا main، 1 = پشتیبان یا backup). میتوانید با حذف پارامتر chip بررسی کنید که در حال حاضر کدامیک انتخاب شده است.
اگر مادربرد شما از یک Super I/O سری ITE IT87 برای ترجمه گذرگاه فلش LPC<->SPI استفاده میکند، flashrom باید این پیکربندی را به طور خودکار شناسایی کند. اگر میخواهید پورت پایه ورودی/خروجی (I/O base port) کنترلر SPI سری IT87 را به جای مقدار ارائهشده توسط BIOS به صورت دستی تنظیم کنید، از ساختار:
flashrom -p internal:it87spiport=portnum
استفاده کنید که در آن portnum شماره پورت ورودی/خروجی است (باید مضربی از 8 باشد). در موارد نادر که flashrom پل ارتباطی فعال IT87 LPC<->SPI را شناسایی نکند، لطفاً یک گزارش باگ ارسال کنید تا بتوانیم مشکل را بررسی و ریشهیابی کنیم.
- چیپستهای AMD (AMD chipsets)
- از چیپست SB700 به بعد، یک میکروکنترلر یکپارچه (IMC) مبتنی بر 8051 در تمامی پلهای جنوبی (southbridge) شرکت AMD تعبیه شده است. سفتافزار آن در همان تراشه فلش میزبان قرار دارد که در صورت فعال بودن IMC، نوشتن روی فلش را پرخطر میکند. Flashrom تلاش میکند تا IMC را موقتاً غیرفعال کند، اما حتی در این حالت نیز تغییر محتویات فلش میتواند اثرات ناخواستهای داشته باشد: هنگامی که IMC کار خود را از سر میگیرد (حداکثر پس از راهاندازی مجدد)، به اجرای کد از حافظه فلش ادامه میدهد. اگر کد حذف شده یا به شکلی نامناسب تغییر یافته باشد، رفتار IMC غیرقابل پیشبینی خواهد بود. بنابراین، اگر flashrom یک IMC فعال را شناسایی کند، پشتیبانی از نوشتن را غیرفعال میسازد مگر اینکه کاربر آن را با ساختار:
flashrom -p internal:amd_imc_force=yes
اجبار کند. مسئولیت ارائه یک ایمیج مناسب یا استثنا کردن ناحیه IMC به کمک یک فایل چیدمان (layout file) بر عهده کاربر است. این محدودیت ممکن است در آینده با درک بهتر جزئیات و دریافت بازخورد کافی از کاربران برطرف شود. اگر مجبور به استفاده از این گزینه برای نوشتن روی تراشه شدید، لطفاً نتیجه را گزارش دهید.
پارامتر اختیاری spispeed فرکانس گذرگاه SPI را در صورت کاربرد مشخص میکند (یعنی SB600 یا بالاتر با یک تراشه فلش SPI که مستقیماً به چیپست متصل است). ساختار دستوری به این صورت است:
flashrom -p internal:spispeed=frequency
که در آن frequency میتواند '16.5 MHz'، '22 MHz'، '33 MHz'، '66 MHz'، '100 MHZ' یا '800 kHz' باشد. پشتیبانی از فرکانسهای خاص به نسل چیپست بستگی دارد:
- سری SB6xx، SB7xx، SP5xxx: از 16.5 مگاهرتز تا و خود 33 مگاهرتز. حالت پیشفرض استفاده از 16.5 مگاهرتز و غیرفعال کردن خواندن سریع (Fast Reads) است.
- سری SB8xx، SB9xx، Hudson: از 16.5 مگاهرتز تا و خود 66 مگاهرتز. حالت پیشفرض استفاده از 16.5 مگاهرتز و غیرفعال کردن خواندن سریع (Fast Reads) است.
- سری Yangtze (با موتور SPI 100 که در Kabini و Tamesh وجود دارد): همه فرکانسها. حالت پیشفرض استفاده از فرکانسی است که در حال حاضر پیکربندی شده است.
پارامتر اختیاری spireadmode حالت خواندن گذرگاه SPI را در صورت امکان مشخص میکند (Bolton یا بالاتر). ساختار دستوری به این صورت است:
flashrom -p internal:spireadmode=mode
که در آن mode میتواند 'Normal (up to 33 MHz)'، 'Normal (up to 66 MHz)'، 'Dual IO (1-1-2)'، 'Quad IO (1-1-4)'، 'Dual IO (1-2-2)'، 'Quad IO (1-4-4)' یا 'Fast Read' باشد.
حالت پیشفرض استفاده از حالت خواندنی است که در حال حاضر پیکربندی شده است.
- چیپستهای اینتل (Intel chipsets)
- اگر یک چیپست اینتل با پل جنوبی ICH8 یا بالاتر دارید که فلش SPI به آن متصل است، و در صورتی که یک توصیفگر (descriptor) معتبر روی آن نوشته شده باشد (مثلاً توسط سازنده)، چیپست یک روش جایگزین برای دسترسی به تراشه(های) فلش به نام ترتیبدهی سختافزاری (Hardware Sequencing) ارائه میدهد. این روش بسیار سادهتر از روش دسترسی معمول (به نام ترتیبدهی نرمافزاری (Software Sequencing)) است، اما به نرمافزار اجازه نمیدهد تا دستورات SPI ارسالی را انتخاب کند. میتوانید از ساختار دستوری:
flashrom -p internal:ich_spi_mode=value
استفاده کنید که در آن value میتواند auto، swseq یا hwseq باشد. بهطور پیشفرض (یا هنگام تنظیم ich_spi_mode=auto) این ماژول تلاش میکند از swseq استفاده کند و فقط در صورت لزوم hwseq را فعال مینماید (مثلاً اگر کدهای عملیاتی (opcodes) مهم به دلیل قفل شدن غیرقابل دسترس باشند، یا اگر بیش از یک تراشه فلش متصل باشد). گزینههای دیگر (swseq، hwseq) در صورت امکان حالت مربوطه را انتخاب میکنند.
پلهای جنوبی ICH8 و جدیدتر در صورتی که توصیفگر معتبری روی آنها نوشته شده باشد، ممکن است دارای بازههای آدرس قفلشده از انواع مختلف باشند. در این صورت، فضای آدرس فلش به چندین ناحیه موسوم به «نواحی فلش» (Flash Regions) تقسیم میشود که به ترتیب شامل سفتافزار میزبان، سفتافزار ME و غیره هستند. توصیفگر فلش همچنین میتواند تا ۵ ناحیه موسوم به نواحی محافظتشده (Protected Regions) را مشخص کند که بازههای آدرس آزادانه انتخابشده و مستقل از «نواحی فلش» یادشده هستند. تمامی این نواحی میتوانند به صورت جداگانه در برابر خواندن و/یا نوشتن محافظت شوند.
اگر چیپست اینتل با پل جنوبی ICH2 یا جدیدتر دارید و میخواهید مقادیر IDSEL خاصی را برای یک تراشه فلش غیرپیشفرض یا یک کنترلر تعبیهشده (EC) تنظیم کنید، میتوانید از ساختار دستوری:
flashrom -p internal:fwh_idsel=value
استفاده کنید که در آن value مقدار خام هگزادسیمال ۴۸ بیتی است که باید در رجیسترهای IDSEL پل جنوبی اینتل نوشته شود. ۳۲ بیت بالایی برای هر بازه ۵۱۲ کیلوبایتی بین 0xffc00000 و 0xffffffff از یک رقم هگزادسیمال استفاده میکنند، و ۱۶ بیت پایینی برای هر بازه ۱۰۲۴ کیلوبایتی بین 0xff400000 و 0xff7fffff از یک رقم هگزادسیمال استفاده مینمایند. راستترین رقم هگزادسیمال مربوط به پایینترین بازه آدرس است. تمام بازههای آدرس دارای یک بازه مشابه متناظر در ۴ مگابایت پایینتر با تنظیمات IDSEL یکسان هستند. مقدار پیشفرض برای ICH7 در مثال زیر آورده شده است.
مثال:
flashrom -p internal:fwh_idsel=0x001122334567
- laptopها (Laptops)
- استفاده از flashrom روی لپتاپهای قدیمیتری که از گذرگاه SPI بوت نمیشوند خطرناک است و میتواند به سادگی سختافزار شما را غیرقابل استفاده کند (آجر کند) (همچنین بخش BUGS را ببینید). کنترلر تعبیهشده (EC) در برخی دستگاهها ممکن است در فرآیند فلش کردن تداخل نامطلوب ایجاد کند. اطلاعات بیشتر در بخش اطلاعات مربوط به لپتاپها و EC به نشانی <> موجود است. مشکلات زمانی بروز میکنند که تراشه فلش بین فریمور BIOS و EC به اشتراک گذاشته شده باشد و EC انتظار دسترسی flashrom به تراشه را نداشته باشد. در حالی که flashrom تلاش میکند محتویات آن حافظه را تغییر دهد، ممکن است EC نیاز به واکشی دستورالعملها یا دادههای جدید از آن داشته باشد و کارکرد صحیح آن متوقف شود. کاوش و خواندن از تراشه نیز ممکن است کارکرد EC را مختل کرده و باعث از کار افتادن فن، خرابی نور پسزمینه، خاموشی ناگهانی و سایر پیامدهای ناگوار شود. flashrom تلاش خواهد کرد تشخیص دهد که آیا روی چنین لپتاپی در حال اجرا است یا خیر و کاوش را به گذرگاههای SPI محدود میکند. اگر با این وجود و با مسئولیت خود مایل به کاوش گذرگاه LPC هستید، از دستور:
flashrom -p internal:laptop=force_I_want_a_brick
استفاده کنید. در صورتی که فلش کردن را روی یک لپتاپ اجبار کنید، کمکی به شما نخواهیم کرد زیرا این کار واقعاً ایده احمقانهای است.
به شما هشدار داده شد.
در حال حاضر ما به نوع شاسی (chassis type) کدگذاریشده در دادههای DMI/SMBIOS برای تشخیص لپتاپها متکی هستیم. برخی سازندگان این بیتها را به درستی پیادهسازی نکرده یا آنها را روی مقادیر عمومی و/یا ساختگی تنظیم کردهاند. در این حالت flashrom هشداری صادر کرده و گذرگاهها را مانند بالا محدود میسازد. در این وضعیت میتوانید از دستور:
flashrom -p internal:laptop=this_is_not_a_laptop
استفاده کنید تا (با مسئولیت خود) به flashrom اعلام نمایید که روی یک لپتاپ اجرا نمیشود.
پروگرامر مجازی (dummy programmer)
پروگرامر مجازی فقط روی یک بافر در حافظه کار میکند. این پروگرامر روشی امن و سریع برای آزمایش جنبههای مختلف flashrom فراهم میآورد و عمدتاً در هنگام توسعه و اشکالزدایی مورد استفاده قرار میگیرد. این پروگرامر قادر است برخی از تراشهها را تا حدی مشخص شبیهسازی کند (عملیات پایهای شناسایی/خواندن/پاکسازی/نوشتن کار میکنند).
یک پارامتر اختیاری انواع گذرگاههایی را که باید پشتیبانی شوند مشخص میکند. برای این منظور باید از ساختار دستوری:
flashrom -p dummy:bus=[type[+type[+type]]]
استفاده کنید که در آن type میتواند شامل parallel، lpc، fwh و spi به هر ترتیبی باشد. اگر bus را بدون type مشخص کنید، تمام گذرگاهها غیرفعال خواهند شد. اگر bus را مشخص نکنید، تمام گذرگاهها فعال خواهند بود.
مثال:
flashrom -p dummy:bus=lpc+fwh
پروگرامر مجازی از شبیهسازی تراشه فلش برای خودآزماییهای خودکار بدون نیاز به دسترسی سختافزاری پشتیبانی میکند. اگر میخواهید یک تراشه فلش را شبیهسازی کنید، از ساختار دستوری:
flashrom -p dummy:emulate=chip
استفاده کنید که در آن chip یکی از تراشههای زیر است (لطفاً فقط نام تراشه را مشخص کنید، نه نام سازنده را):
- ST M25P10.RES تراشه فلش SPI (اندازه ۱۲۸ کیلوبایت، RES، نوشتن صفحهای)
- SST SST25VF040.REMS تراشه فلش SPI (اندازه ۵۱۲ کیلوبایت، REMS، نوشتن بایتی)
- SST SST25VF032B تراشه فلش SPI (اندازه ۴۰۹۶ کیلوبایت، RDID، نوشتن AAI)
- Macronix MX25L6436 تراشه فلش SPI (اندازه ۸۱۹۲ کیلوبایت، RDID، SFDP)
- Winbond W25Q128FV تراشه فلش SPI (اندازه ۱۶۳۸۴ کیلوبایت، RDID)
- Spansion S25FL128L تراشه فلش SPI (اندازه ۱۶۳۸۴ کیلوبایت، RDID)
- سازنده مجازی VARIABLE_SIZE تراشه فلش SPI (اندازه قابل پیکربندی، نوشتن صفحهای)
مثال:
flashrom -p dummy:emulate=SST25VF040.REMS
برای استفاده از تراشه VARIABLE_SIZE، باید پارامتر size مشخص شود تا اندازه تراشه فلش به صورت توانی از ۲ پیکربندی گردد.
مثال:
flashrom -p dummy:emulate=VARIABLE_SIZE,size=16777216,image=dummy.bin
- ایمیجهای ماندگار (Persistent images)
- اگر از شبیهسازی تراشه فلش استفاده کنید، ماندگاری ایمیج فلش نیز با استفاده از ساختار دستوری:
flashrom -p dummy:emulate=chip,image=image.rom
در دسترس است که در آن image.rom فایلی است که محتویات شبیهسازیشده تراشه هنگام شروع به کار flashrom از آن خوانده شده و هنگام خاموش شدن flashrom محتویات تراشه در آن نوشته میشود.
مثال:
flashrom -p dummy:emulate=M25P10.RES,image=dummy.bin
- اندازه تکههای نوشتن SPI (SPI write chunk size)
- اگر از شبیهسازی تراشه فلش SPI برای تراشهای استفاده میکنید که از نوشتن صفحهای SPI با کد عملیاتی پیشفرض پشتیبانی میکند، میتوانید حداکثر اندازه مجاز تکه نوشتن را با ساختار دستوری:
flashrom -p dummy:emulate=chip,spi_write_256_chunksize=size
تنظیم کنید که در آن size تعداد بایتها است (حداقل ۱، حداکثر ۲۵۶). مثال:
flashrom -p dummy:emulate=M25P10.RES,spi_write_256_chunksize=5
- لیست سیاه SPI (SPI blacklist)
- برای شبیهسازی پروگرامری که از ارسال دستورات خاص SPI به تراشه فلش امتناع میورزد، میتوانید یک لیست سیاه از دستورات SPI را با ساختار دستوری:
flashrom -p dummy:spi_blacklist=commandlist
مشخص کنید که در آن commandlist فهرستی از نمایشهای هگزادسیمال دو رقمی دستورات SPI است. اگر commandlist مثلاً 0302 باشد، flashrom به گونهای عمل میکند که گویی کنترلر SPI از اجرای دستور 0x03 (خوانش یا READ) و دستور 0x02 (نوشتن یا WRITE) خودداری میکند. commandlist میتواند تا ۵۱۲ کاراکتر (۲۵۶ دستور) طول داشته باشد. نکته پیادهسازی: flashrom خطا را هنگام اجرای دستور تشخیص خواهد داد.
- لیست نادیدهگیری SPI (SPI ignorelist)
- برای شبیهسازی یک تراشه فلش که دستورات خاص SPI را نادیده میگیرد (پشتیبانی نمیکند)، میتوانید لیست نادیدهگیری دستورات SPI را با ساختار دستوری:
flashrom -p dummy:spi_ignorelist=commandlist
مشخص کنید که در آن commandlist فهرستی از نمایشهای هگزادسیمال دو رقمی دستورات SPI است. اگر commandlist مثلاً 0302 باشد، تراشه فلش شبیهسازیشده دستور 0x03 (خواندن یا READ) و دستور 0x02 (نوشتن یا WRITE) را نادیده خواهد گرفت. commandlist میتواند تا ۵۱۲ کاراکتر (۲۵۶ دستور) طول داشته باشد. نکته پیادهسازی: flashrom در حین اجرای دستور خطایی را تشخیص نخواهد داد.
- رجیستر وضعیت SPI (SPI status register)
- میتوانید محتوای اولیه رجیستر وضعیت تراشه را با ساختار دستوری:
flashrom -p dummy:spi_status=content"
مشخص کنید که در آن content یک مقدار هگزادسیمال تا سقف ۲۴ بیت است. برای مثال، 0x332211 مقدار 0x11 را به SR1، مقدار 0x22 را به SR2 و مقدار 0x33 را به SR3 اختصاص میدهد. مقادیر کوتاهتر با صفرهایی در سمت چپ تا ۲۴ بیت پر میشوند (padding). برای جزئیات بیشتر درباره محتوای رجیسترها، به دیتاشیت تراشه انتخابی مراجعه کنید.
- حفاظت در برابر نوشتن (Write protection)
- تراشههای
دارای
شبیهسازی
WP (حفاظت در
برابر
نوشتن): W25Q128FV،
S25FL128L.
میتوانید وضعیت پین سختافزاری حفاظت (WP) را با ساختار دستوری:
flashrom -p dummy:hwwp=state
شبیهسازی کنید که در آن state برابر با yes یا no (مقدار پیشفرض) است. مقدار yes به این معنی است که وضعیت فعال پین به معنای حفاظت تراشه در برابر نوشتن است (روی سختافزار واقعی این پین معمولاً منفی/معکوس است، اما نه در اینجا).
- فرکانس (Frequency)
- فرکانس را
میتوان بر
حسب Hz
(پیشفرض)،
KHz یا MHz مشخص
کرد (حساس
به حروف
بزرگ و کوچک
نیست). اگر
پارامتر freq
از خط فرمان
ارسال شود،
دستورات
قبل از
بازگشت
برای مدت
زمان مشخصی
تاخیر
خواهند
داشت تا
فرکانس
درخواستی
شبیهسازی
شود.
بازه معتبر [1Hz, 8000Mhz] است و به طور پیشفرض هیچ تاخیری وجود ندارد.
میزان تاخیر یک دستور SPI متناسب با تعداد بیتهای ارسالشده روی گذرگاه SPI در هر دو جهت است و بر اساس این فرض محاسبه میشود که انتقال با نرخ ۱ بیت بر هرتز انجام میگیرد:
flashrom -p dummy:emulate=W25Q128FV,freq=64mhz
پروگرامر شبیهساز خطا (fault programmer)
پروگرامر شبیهساز خطا (fault programmer) یک لایه برنامهپذیر تزریق خطا است که یک پروگرامر موجود را در بر گرفته و خطاهای قطعی و بازتولیدپذیر را برای شبیهسازی رفتار سختافزار غیرقابل اعتماد تزریق میکند. این لایه برای آزمایش منطق راستیآزمایی (verification)، سازوکارهای تلاش مجدد (retry) و پایداری گردشهای کاری فلش کردن در نظر گرفته شده است. در حالی که dummy مسیر بدون نقص و ایدهآل (happy path) را آزمایش میکند، fault سایر مسیرها را میآزماید.
پارامتر backend الزامی است و نام پروگرامر زیرین را مشخص میکند:
flashrom -p fault:backend=dummy,bus=spi,emulate=W25Q128FV,seed=42
تمام پارامترهای ویژه شبیهساز خطا ابتدا استخراج میشوند؛ پارامترهای باقیمانده به پروگرامر پشتیبان (backend) فوروارد میگردند. در حال حاضر فقط بکاندهای SPI پشتیبانی میشوند.
- قطعیتپذیری (Determinism)
- پارامتر اختیاری seed تولیدکننده اعداد شبهتصادفی (PRNG) را مقداردهی اولیه میکند (پیشفرض: 0). seed یکسان + پیکربندی یکسان = خطاهای کاملاً یکسان در طول اجراهای مختلف:
flashrom -p fault:backend=dummy,...,seed=42
- خرابی بیتها (Bit corruption)
- پارامتر flip_prob احتمال معکوس شدن یک بیت تصادفی در هر بایت از دادههای خواندهشده را مشخص میکند:
flashrom -p fault:backend=dummy,...,flip_prob=0.001
- خواندن ناقص (Short reads)
- پارامتر short_read_prob باعث بازگرداندن یک بافر خواندن بریدهشده (ناقص) میشود. پارامتر min_read_ratio (پیشفرض: 0.5) حداقل کسری از بایتهای بازگرداندهشده را کنترل میکند:
flashrom -p fault:backend=dummy,...,short_read_prob=0.1,min_read_ratio=0.8
- خطاهای نوشتن (Write faults)
- پارامتر write_fail_prob باعث میشود عملیات نوشتن یک خطا بازگرداند. پارامتر write_lie_prob باعث میشود عملیات نوشتن بدون نوشتن هیچ دادهای، وضعیت موفقیتآمیز برگرداند. پارامتر partial_write_prob تنها زیرمجموعهای تصادفی از دادهها را مینویسد:
flashrom -p fault:backend=dummy,...,write_lie_prob=0.2
- ثبت رویدادها (Logging)
- تمامی خطاهای تزریقشده در سطح پرگویی اشکالزدایی (-V) ثبت میشوند. خلاصهای از خطاهای تزریقشده هنگام خروج چاپ میشود.
نمونههای کاربرد
تشخیص خواندنهای ناپایدار:
flashrom -p fault:backend=dummy,...,flip_prob=0.001,seed=1 -r a.bin flashrom -p fault:backend=dummy,...,flip_prob=0.001,seed=2 -r b.bin cmp a.bin b.bin
آزمایش راستیآزمایی نوشتن:
flashrom -p fault:backend=dummy,...,write_lie_prob=0.2 -w image.bin
پروگرامرهای nic3com، nicrealtek، nicnatsemi، nicintel، nicintel_eeprom، nicintel_spi، gfxnvidia، ogp_spi، drkaiser، satasii، satamv، atahpt، atavia، atapromise، it8212 (programmers)
این پروگرامرها گزینهای برای تعیین آدرس PCI کارت مورد نظر شما دارند که اگر بیش از یک کارت پشتیبانیشده توسط پروگرامر انتخابشده در سیستم شما نصب باشد، تعیین آن الزامی است. نحو دستور بهصورت زیر است:
flashrom -p xxxx:pci=bb:dd.f
که در آن xxxx نام پروگرامر، bb شماره گذرگاه PCI، dd شماره دستگاه PCI و b شماره تابع PCI دستگاه مورد نظر است. مثال:
flashrom -p nic3com:pci=05:04.0
برخی از این پروگرامرها دارای توضیحات بیشتری در ادامه هستند.
پروگرامر atavia (atavia programmer)
تراشه VT6421A یک کنترلکننده PATA/SATA PCI است که روی کارتهای مختلف و ارزانقیمت PCI یافت میشود. در حال حاضر یک برگه مشخصات (datasheet) در آدرس http://spacehopper.org/mirrors/ftp.vtbridge.org/Docs/Storage/DS_VT6421A_100_CCPL.PDF در دسترس است.
وصلهای برای flashrom وجود دارد که امکان دسترسی به تراشه فلش متصلشده را فراهم میکند، اما با برخی کارتها دچار مشکل است. به نظر میرسد این کارتها به دلایل نامشخصی به یک آفست اضافهشده به آدرس تراشه نیاز دارند.
به دلیل نحوه آدرسدهی مبهم کنترلکننده VIA VT6421A، کاربر میتواند آفست را با نحو زیر مشخص کند:
flashrom -p atavia:offset=addr
که در آن addr طبق معمول تفسیر میشود (پیشوند 0x برای مقادیر هگزادسیمال، 0 برای مقادیر هشتهشتی (octal)، و در غیر این صورت دهدهی).
کارتهای دیدهشده در عمل:
| سازنده | مدل | نسخه (rev.) | کشور | کد ساخت (lot) | تراشه | اندازه [بایت] | آفست | lspci |
| W39V040BPZ | 512k | |||||||
| Eminent | EM2001 | 0910CD | Taiwan | 2IA0022481 | SST49LF020A | 256k | 0xfff00000 | [2] |
| "SATA CONNECT" | "High speed 2/4-port Serial ATA card" | 0901CD | Taiwan | 2IA0022471 | Pm49FL004 | 512k | 0xfff80000 = 0xffffffff - size + 1 (معروف به phys_addr) | [3] |
| Gembird | SATA-3 | W39V040C | 512k | |||||
| HZ-006 | Pm39LV512 | 64k | [4] |
نسخه بازبینی (revision) شامل دو نویسه است که در زیر رشته "VT6421A" روی تراشه چاپ شده است و پیشوند آن ۴ رقم است که سال و هفته تولید را کدگذاری میکنند. نام کشور در سمت راست نسخه بازبینی درج شده است.
پروگرامر atapromise (atapromise programmer)
این پروگرامر در حال حاضر فارغ از اندازه واقعی تراشه فلش، به ۳۲ کیلوبایت محدود است. این محدودیت از این حقیقت ناشی میشود که روی دستگاه آزمایششده (یک Promise Ultra100)، تمام خطوط آدرس تراشه واقعاً متصل نشده بودند. میتوانید از این پروگرامر برای فلش کردن بهروزرسانیهای میانافزار استفاده کنید، چرا که این بهروزرسانیها تنها ۱۶ کیلوبایت حجم دارند (پدینگ تا ۳۲ کیلوبایت الزامی است).
پروگرامر nic3com (nic3com programmer)
نرمافزار flashrom از برخی کارتهای شبکه 3Com برای فلش مجدد حافظه فلش (موازی) متصل به این کارتها پشتیبانی میکند، اما همچنین میتوان از این کارتها برای فلش مجدد سایر تراشههایی که از نظر الکتریکی با آن سازگارند استفاده کرد. لطفاً توجه داشته باشید که کم بودن تعداد خطوط آدرس متصل به تراشه ممکن است دسترسی به تراشههای بزرگ را غیرممکن کند. حداکثر اندازه تراشه پشتیبانیشده ۱۲۸ کیلوبایت است.
پروگرامر nicintel_spi (nicintel_spi programmer)
پروگرامر برای حافظههای فلش ROM از نوع SPI روی کارتهای شبکه گیگابیتی اینتل. فقط روی سختافزار/PCI ۳۲-بیتی آزمایش شده است.
پروگرامر nicintel_eeprom (nicintel_eeprom programmer)
این اولین ماژول پروگرامر در flashrom است که به جای تراشههای فلش NOR، دسترسی به EEPROMهای نصبشده روی کارتهای اترنت گیگابیتی مبتنی بر کنترلکننده 82580 NIC اینتل را فراهم میکند. از آنجا که EEPROMها معمولاً اندازه خود را اعلام نمیکنند و شناسایی خودکار ندارند، کنترلکننده به مقادیر اندازه صحیح که در آدرسهای از پیش تعریفشده درون تراشه نوشته شدهاند اتکا میکند. برنامه Flashrom از این رویه پیروی میکند، اما اگر یک EEPROM/کارت برنامهریزینشده شناسایی شود، حداقل اندازه ۱۶ کیلوبایت (۱۲۸ کیلوبیت) را در نظر میگیرد. اینتل تراشههای EEPROM زیر را به عنوان سازگار مشخص کرده است: Atmel AT25128، AT25256، Micron (ST) M95128، M95256 و OnSemi (Catalyst) CAT25CS128.
پروگرامر gfxnvidia (gfxnvidia programmer)
نرمافزار Flashrom از برخی کارتهای گرافیک Nvidia برای فلش مجدد حافظه فلش (موازی) متصل به این کارتها پشتیبانی میکند، اما استفاده از این کارتها برای فلش مجدد سایر تراشههایی که از نظر الکتریکی سازگار هستند نیز امکانپذیر است.
پروگرامر satasii (satasii programmer)
نرمافزار Flashrom از برخی کنترلکنندههای SiI ATA/SATA برای فلش مجدد حافظه فلش متصل به این کارتهای کنترلکننده پشتیبانی میکند، اما استفاده از این کارتها برای فلش مجدد سایر تراشههایی که از نظر الکتریکی سازگار هستند نیز ممکن است. لطفاً توجه داشته باشید که کم بودن تعداد خطوط آدرس متصل به تراشه ممکن است دسترسی به تراشههای بزرگ را غیرممکن سازد.
پروگرامر ft2232_spi (ft2232_spi programmer)
این ماژول از پروگرامرهای گوناگون مبتنی بر تراشههای FTDI FT2232/FT4232H/FT232H پشتیبانی میکند، از جمله DLP Design DLP-USB1232H، openbiosprog-spi، Amontec JTAGkey/JTAGkey-tiny/JTAGkey-2، Dangerous Prototypes Bus Blaster، Olimex ARM-USB-TINY/-H، Olimex ARM-USB-OCD/-H، برد دیباگ OpenMoko Neo1973 (نسخه V2+)، آداپتور چندپروتکلی TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA)، TUMPA Lite، GOEPEL PicoTAP، Google Servo v1/v2، Tin Can Tools Flyswatter/Flyswatter 2 و Kristech KT-LINK.
یک پارامتر اختیاری، نوع کنترلکننده و کانال/رابط/درگاه مورد پشتیبانی آن را مشخص میکند. برای این منظور باید از نحو زیر استفاده کنید:
flashrom \-p ft2232_spi:type=model,port=interface
که در آن model میتواند 2232H، 4232H، 232H، jtagkey، busblaster، openmoko، arm-usb-tiny، arm-usb-tiny-h، arm-usb-ocd، arm-usb-ocd-h، tumpa، tumpalite، picotap، google-servo، ``google-servo-v2، google-servo-v2-legacy یا kt-link باشد. پارامتر interface میتواند A، B، C یا D باشد. مدل پیشفرض 4232H، رابط پیشفرض A است و بهطور پیشفرض از GPIO استفاده نمیشود.
اگر بیش از یک دستگاه سازگار با ft2232_spi متصل باشد، میتوانید با مشخص کردن شماره سریال آن از طریق نحو زیر، دستگاه مورد نظر را انتخاب کنید:
flashrom -p ft2232_spi:serial=number
که در آن number شماره سریال دستگاه است (که برای مثال در خروجی دستور lsusb -v یافت میشود).
تمام مدلهای پشتیبانیشده توسط درایور ft2232_spi میتوانند نرخ کلاک SPI را با تعیین یک مقسم (divisor) پیکربندی کنند. مقسمهای قابل بیان همگی اعداد زوج بین ۲ و 2^17 (=131072) هستند که منجر به فرکانسهای کلاک SPI از ۶ مگاهرتز تا حدود ۹۲ هرتز برای ورودیهای ۱۲ مگاهرتز (تراشههای غیر H) و ۳۰ مگاهرتز تا حدود ۴۵۸ هرتز برای ورودیهای ۶۰ مگاهرتز (تراشههای 'H') میشوند. مقسم پیشفرض روی ۲ تنظیم شده است، اما میتوانید با تعیین پارامتر اختیاری divisor با نحو زیر از مقدار دیگری استفاده کنید:
flashrom -p ft2232_spi:divisor=div
با استفاده از پارامتر csgpiol (منسوخشده - بهجای آن از gpiol استفاده کنید) میتوان یک پایه CS# اضافی انتخاب کرد، که مقدار آن میتواند عددی بین 0 و 3 باشد که به ترتیب نمایانگر GPIOL0 تا GPIOL3 است. مثال:
flashrom -p ft2232_spi:csgpiol=3
پارامتر gpiolX=[HLC] امکان استفاده از پایههای GPIOL را به عنوان gpioهای عمومی با مقدار ثابت در حین عملیات فلش یا به عنوان سیگنال CS# اضافی فراهم میکند، که در آن X میتواند عددی بین 0 و 3 باشد که به ترتیب نمایانگر GPIOL0 تا GPIOL3 است. این پارامتر میتواند چند بار مشخص شود (یک بار به ازای هر پایه GPIOL). مقادیر معتبر عبارتند از H، L و C:
- H - تنظیم خروجی GPIOL روی سطح بالا (high)
- L - تنظیم خروجی GPIOL روی سطح پایین (low)
- C - استفاده از GPIOL به عنوان خروجی CS# اضافی
مثال:
flashrom -p ft2232_spi:gpiol0=H
توجه داشته باشید که همه پایههای GPIOL در تمام پروگرامرها آزادانه قابل استفاده نیستند زیرا برخی دارای عملکردهای خاصی هستند.
پروگرامر serprog (serprog programmer)
این ماژول از تمام پروگرامرهایی که با پروتکل serprog کار میکنند پشتیبانی میکند. این شامل برخی دستگاههای مبتنی بر آردوینو و همچنین پروگرامرهای گوناگون ساختهشده توسط Urja Rannikko، Juhana Helovuo، Stefan Tauner، Chi Zhang و افراد بسیار دیگر است.
یک پارامتر الزامی، یک دستگاه سریال (و باود ریت) یا ترکیبی از IP/درگاه را برای ارتباط با پروگرامر مشخص میکند. ترکیب دستگاه/باود باید با dev= شروع شود و باود ریت اختیاری با دو نقطه (:) جدا شود. برای مثال:
flashrom -p serprog:dev=/dev/ttyS0:115200
اگر باود ریتی مشخص نشود، مقادیر پیشفرض سیستمعامل/سختافزار استفاده خواهند شد. برای اتصالات IP باید از نحو زیر استفاده کنید:
flashrom -p serprog:ip=ipaddr:port
در صورتی که دستگاه پشتیبانی کند، میتوانید فرکانس کلاک SPI را با پارامتر اختیاری spispeed تنظیم کنید. فرکانس بر حسب هرتز ارزیابی میشود، مگر اینکه پسوند M یا k مشخص شده باشد که در این صورت به ترتیب مگاهرتز یا کیلوهرتز در نظر گرفته میشوند. مثالی برای تنظیم فرکانس روی ۲ مگاهرتز:
flashrom -p serprog:dev=/dev/device:baud,spispeed=2M
پارامتر اختیاری cs میتواند برای تغییر شماره chip select مورد استفاده قرار گیرد. این امکان را فراهم میسازد که چند تراشه را به طور همزمان متصل کرده و تراشه مورد نظر را به روش نرمافزاری (به جای سیمکشی دوباره) برای فلش انتخاب کنید:
flashrom -p serprog:dev=/dev/device:baud,cs=0
برای عملکرد این ویژگی، پیادهسازی پروگرامر مربوطه باید از آن پشتیبانی کند. اگر chip select درخواستی در دسترس نباشد، flashrom به صورت ایمن ناموفق خواهد بود.
اطلاعات بیشتر درباره serprog در این سند در دسترس است: Serial Flasher Protocol Specification <>.
پروگرامر buspirate_spi (buspirate_spi programmer)
پارامتر الزامی dev گره دستگاه Bus Pirate را مشخص میکند و پارامتر اختیاری spispeed فرکانس گذرگاه SPI را تعیین مینماید. جداکننده پارامترها کاما (,) است. نحو دستور عبارت است از:
flashrom -p buspirate_spi:dev=/dev/device,spispeed=frequency
که در آن frequency میتواند 30k، 125k، 250k، 1M، 2M، 2.6M، 4M یا 8M (بر حسب هرتز) باشد. حالت پیشفرض، حداکثر فرکانس ۸ مگاهرتز است.
باود ریت برای ارتباط بین میزبان و Bus Pirate میتواند با پارامتر اختیاری serialspeed تعیین شود. نحو دستور عبارت است از:
flashrom -p buspirate_spi:serialspeed=baud
که در آن baud میتواند 115200، 230400، 250000 یا 2000000 (2M) باشد. مقدار پیشفرض برای سختافزار Bus Pirate نسخه ۳.۰ و بالاتر برابر با 2M باود است، و در غیر این صورت ۱۱۵۲۰۰ میباشد.
یک پارامتر اختیاری pullups استفاده از مقاومتهای pull-up داخلی Bus Pirate را مشخص میکند. این گزینه ممکن است هنگام کار با یک تراشه فلش ROM که از نظر فیزیکی از برد جدا کردهاید مورد نیاز باشد. نحو دستور بهصورت زیر است:
flashrom -p buspirate_spi:pullups=state
که در آن state میتواند on یا off باشد. اطلاعات بیشتر درباره مقاومتهای pull-up در Bus Pirate و هدف استفاده از آنها در راهنمایی از dangerousprototypes در دسترس است: http://dangerousprototypes.com/docs/Practical_guide_to_Bus_Pirate_pull-up_resistors.
هنگام کار با تراشههای ولتاژ پایین، مقاومتهای pull-up داخلی ۱۰ کیلواهمی Bus Pirate ممکن است بیش از حد بالا باشند. در چنین مواردی، ایجاد یک pull-up خارجی با استفاده از مقاومتهایی با مقدار کمتر ضروری است.
برای این کار میتوانید از پارامتر hiz استفاده کنید. در این حالت، Bus Pirate به عنوان درین باز (open drain) عمل خواهد کرد. نحو دستور عبارت است از:
flashrom -p buspirate_spi:hiz=state
که در آن state میتواند on یا off باشد.
وضعیت پایههای منبع تغذیه Bus Pirate از طریق پارامتر اختیاری psus قابل کنترل است. نحو دستور عبارت است از:
flashrom -p buspirate_spi:psus=state
که در آن state میتواند on یا off باشد. این قابلیت به Bus Pirate اجازه میدهد تا برق تراشه ROM را مستقیماً تأمین کند. این گزینه همچنین میتواند با اتصال ورودی Vpu مربوط به Bus Pirate به پایه Vcc مناسب، ولتاژ pullup مورد نیاز را تأمین نماید (هنگام استفاده از گزینه pullups).
یک پارامتر اختیاری aux وضعیت پایه کمکی (auxiliary pin) در Bus Pirate را مشخص میکند. این گزینه میتواند برای بالا یا پایین بردن وضعیت پایه کمکی قبل از انتقال اطلاعات استفاده شود. نحو دستور عبارت است از:
flashrom -p buspirate_spi:aux=state
که در آن state میتواند high یا low باشد. مقدار پیشفرض state برابر با high است.
پروگرامر pickit2_spi (pickit2_spi programmer)
پارامتر اختیاری voltage ولتاژی را که PICkit2 باید استفاده کند مشخص میکند. واحد پیشفرض در صورت عدم تعیین واحد، ولت است. میتوانید از mV، millivolt، V یا Volt به عنوان مشخصکننده واحد استفاده کنید. نحو دستور عبارت است از:
flashrom \-p pickit2_spi:voltage=value
که در آن value میتواند 0V، 1.8V، 2.5V، 3.5V یا معادل آن بر حسب میلیولت باشد.
پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص میکند. نحو دستور عبارت است از:
flashrom -p pickit2_spi:spispeed=frequency
که در آن frequency میتواند 250k، 333k، 500k یا 1M (بر حسب هرتز) باشد. مقدار پیشفرض فرکانس ۱ مگاهرتز است.
پروگرامر dediprog (dediprog programmer)
پارامتر اختیاری voltage ولتاژی را که Dediprog باید استفاده کند مشخص میکند. واحد پیشفرض در صورت عدم تعیین، ولت است. میتوانید از mV، milliVolt، V یا Volt به عنوان مشخصکننده واحد استفاده کنید. نحو دستور عبارت است از:
flashrom -p dediprog:voltage=value
که در آن value میتواند 0V، 1.8V، 2.5V، 3.5V یا معادل آن بر حسب میلیولت باشد.
پارامتر اختیاری device مشخص میکند که از کدامیک از چند دستگاه Dediprog متصلشده باید استفاده شود. لطفاً توجه داشته باشید که ترتیب به تابع usb_get_busses() در کتابخانه libusb بستگی دارد و شمارهگذاری از 0 آغاز میشود. مثال استفاده برای انتخاب دومین دستگاه:
flashrom -p dediprog:device=1
پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص میکند. میانافزار روی دستگاه باید نسخه 5.0.0 یا جدیدتر باشد. نحو دستور عبارت است از:
flashrom -p dediprog:spispeed=frequency
که در آن frequency میتواند 375k، 750k، 1.5M، 2.18M، 3M، 8M، 12M یا 24M (بر حسب هرتز) باشد. مقدار پیشفرض فرکانس ۱۲ مگاهرتز است.
پارامتر اختیاری target مشخص میکند که کدام تراشه هدف باید استفاده شود. نحو دستور عبارت است از:
flashrom -p dediprog:target=value
که در آن value میتواند 1، 2 یا 3 باشد تا به ترتیب تراشه هدف 1، 2 یا سوکت (3) را انتخاب کند. مقدار پیشفرض، تراشه هدف 1 است.
پروگرامر rayer_spi (rayer_spi programmer)
آدرس پایه I/O پیشفرض برای پورت موازی 0x378 است و میتوانید با استفاده از پارامتر اختیاری iobase یک آدرس پایه I/O جایگزین با ساختار دستوری زیر تعیین کنید:
flashrom -p rayer_spi:iobase=baseaddr
که در آن baseaddr آدرس درگاه I/O پایه پورت موازی است که باید مضربی از چهار باشد. دقت داشته باشید که پیشوند "0x" برای آدرسهای درگاه هگزادسیمال فراموش نشود.
نوع کابل پیشفرض، کابل RayeR است. میتوانید با استفاده از پارامتر اختیاری type نوع کابل را با ساختار دستوری زیر تعیین کنید:
flashrom -p rayer_spi:type=model
که در آن model میتواند شامل rayer برای کابل RayeR، byteblastermv برای Altera ByteBlasterMV، stk200 برای Atmel STK200/300، wiggler برای Macraigor Wiggler، xilinx برای کابل موازی Xilinx Parallel Cable III (DLC 5) یا spi_tt برای سختافزارهای سازگار با SPI Tiny Tools باشد.
اطلاعات بیشتر درباره سختافزار RayeR در وبسایت RayeR به نشانی http://rayer.g6.cz/elektro/spipgm.htm موجود است. دیتاشیت Altera ByteBlasterMV را میتوان از Altera به نشانی http://www.altera.co.jp/literature/ds/dsbytemv.pdf دریافت کرد. برای اطلاعات بیشتر درباره Macraigor Wiggler به صفحه اصلی این شرکت به نشانی http://www.macraigor.com/wiggler.htm مراجعه کنید. شماتیک Xilinx DLC 5 نیز در راهنمای Xilinx به نشانی http://www.xilinx.com/support/documentation/user_guides/xtp029.pdf منتشر شده است.
پروگرامر raiden_debug_spi (raiden_debug_spi programmer)
برخی از دستگاهها مانند GSC میدانند چگونه به تراشههای فلش AP و EC متصل شدهاند، و با استفاده از پارامتر target میتوان مشخص کرد که با کدام دستگاه خاص ارتباط برقرار کنند:
flashrom -p raiden_debug_spi:target={ap,ec}
سایر دستگاهها مانند Servo Micro و HyperDebug عمومی هستند و از نحوه سیمکشی خود اطلاعی ندارند؛ فراخواننده وظیفه دارد ابتدا مالتیپلکسرها (MUX) یا بافرهای مناسب را پیکربندی کند و سپس به دیباگر اعلام کند که از کدام پورت استفاده نماید (Servo Micro فقط یک پورت SPI دارد، HyperDebug اولین نمونه از این نوع است که چندین پورت دارد):
flashrom -p raiden_debug_spi:target=N
که در آن N یک عدد صحیح غیرمنفی (پیشفرض 0) است.
حالت پیشفرض، استفاده از اولین دستگاه servo در دسترس است. میتوانید با استفاده از پارامتر اختیاری serial شماره سریال دستگاه USB سِروو را برای استفاده اختصاصی مشخص کنید:
flashrom -p raiden_debug_spi:serial=XXX
شماره سریال دستگاه servo را میتوان از طریق lsusb پیدا کرد. Raiden هدف ap را بررسی (poll) میکند و منتظر میماند تا برق سیستم روی دستگاههای فلش AP و EC پایدار شود.
پارامتر اختیاری custom_rst=true رفتار فرایند ریست را تغییر میدهد:
flashrom -p raiden_debug_spi:custom_rst=<true|false>
با این ساختار دستوری که در آن:
مقدار custom_rst=false همان مهلت پیشفرض ضمنی ۳ میلیثانیهای است
و مقدار custom_rst=true به جای RAIDEN_DEBUG_SPI_REQ_ENABLE_AP فلگ RAIDEN_DEBUG_SPI_REQ_ENABLE_AP_CUSTOM را تنظیم میکند. این ریست سفارشی مهلت زمانی را از ۳ میلیثانیه به ۱۰ میلیثانیه تغییر میدهد و EC_RST_L را تنظیم نمیکند، به این معنی که نه EC و نه AP هیچکدام ریست نخواهند شد. با این تنظیم، مدیریت سیگنال ریست بهصورت دستی یا از طریق پیکربندی GPIO بر عهده کاربر است. عدم مدیریت مناسب سیگنال ریست به احتمال زیاد منجر به بروز خطاهای فلش کردن خواهد شد.
اطلاعات بیشتر درباره سختافزار servo سیستمعامل ChromiumOS در وبسایت servo به نشانی https://chromium.googlesource.com/chromiumos/third_party/hdctools/+/HEAD/docs/servo_v4.md در دسترس است.
پروگرامر pony_spi (pony_spi programmer)
پورت سریال (مانند /dev/ttyS0 یا /dev/ttyUSB0 در لینوکس یا COM3 در ویندوز) با استفاده از پارامتر اجباری dev مشخص میشود. نوع آداپتور بین SI-Prog (مورد استفاده برای دستگاههای SPI با PonyProg 2000) یا یک پروگرامر سریال بیتبنگ سفارشی به نام "serbang" قابل انتخاب است. پارامتر اختیاری type مقادیر si_prog (پیشفرض) یا serbang را میپذیرد.
اطلاعات مربوط به آداپتور SI-Prog در وبسایت آن به نشانی http://www.lancos.com/siprogsch.html یافت میشود.
یک نمونه فراخوانی flashrom عبارت است از:
flashrom -p pony_spi:dev=/dev/ttyS0,type=serbang
لطفاً توجه داشته باشید که اگرچه مبدلهای USB به سریال در شرایط خاصی کار میکنند، اما این کار سرعت عملیات را به شدت کاهش میدهد.
پروگرامر ogp_spi (ogp_spi programmer)
تراشه رام فلش (flash ROM) مورد دسترسی باید با پارامتر rom مشخص شود:
flashrom -p ogp_spi:rom=name
که در آن name برای رام پیکربندی یکی از مقادیر cprom یا s3 و برای رام بایوس یکی از مقادیر bprom یا bios است. اگر بیش از یک کارت پشتیبانیشده توسط پروگرامر ogp_spi روی سیستم شما نصب شده باشد، باید آدرس PCI کارت مورد نظر خود را با پارامتر pci= همانطور که در بخش nic3com و موارد مشابه در بالا توضیح داده شد مشخص نمایید.
پروگرامر linux_mtd (linux_mtd programmer)
میتوانید دستگاه MTD مورد استفاده را با ساختار دستوری:
flashrom -p linux_mtd:dev=N
مشخص کنید که در آن N شماره گره دستگاه لینوکسی (/dev/mtdN) برای دستگاه MTD شما است. در صورت عدم تعیین، اولین دستگاه MTD یافتشده (مانند /dev/mtd0) بهطور پیشفرض استفاده خواهد شد.
برخی کنترلکنندهها از خواندن محدودههای محافظتشده توسط سفتافزار (مانند ثباتهای محدوده محافظتشده Intel PCH) خودداری میکنند و کل عملیات خواندن با شکست مواجه میشود. با استفاده از پارامتر اختیاری ignore_read_errors=yes بلوکهای غیرقابلخواندن با مقدار پاکشده (معمولاً 0xff) جایگزین میشوند و یک هشدار چاپ میگردد که امکان استخراج (dump) بخشهای قابلدسترسی باقیمانده فلش را فراهم میکند:
flashrom -p linux_mtd:dev=N,ignore_read_errors=yes -r dump.bin
توجه داشته باشید که این گزینه تمام خطاهای خواندن گزارششده توسط هسته را نادیده میگیرد، نه فقط مواردی که ناشی از محدودههای حفاظتشده سفتافزار هستند. هر بلوکی که به هر دلیلی قابل خواندن نباشد، با مقدار پاکشده جایگزین خواهد شد، بنابراین نسخه استخراجشده ممکن است با محتوای واقعی فلش تفاوت داشته باشد.
لطفاً توجه داشته باشید که درایور linux_mtd فقط روی لینوکس کار میکند.
پروگرامر linux_spi (linux_spi programmer)
باید کنترلکننده SPI مورد استفاده را با ساختار دستوری:
flashrom -p linux_spi:dev=/dev/spidevX.Y
مشخص کنید که در آن /dev/spidevX.Y گره دستگاه لینوکسی برای کنترلکننده SPI شما است.
در صورتی که دستگاه پشتیبانی کند، میتوانید فرکانس ساعت SPI را با پارامتر اختیاری spispeed تنظیم کنید. فرکانس بر حسب کیلوهرتز تفسیر میشود. مثالی که فرکانس را روی ۸ مگاهرتز تنظیم میکند:
flashrom -p linux_spi:dev=/dev/spidevX.Y,spispeed=8000
لطفاً توجه داشته باشید که درایور linux_spi فقط روی لینوکس کار میکند.
پروگرامر mstarddc_spi (mstarddc_spi programmer)
کانال داده نمایشگر (DDC) یک گذرگاه I2C موجود روی کانکتورهای VGA و DVI است که امکان تبادل اطلاعات بین رایانه و نمایشگرهای متصل را فراهم میسازد. رایجترین کاربردهای آن دریافت مشخصات نمایشگر از طریق EDID (در آدرس 0x50 پروتکل I2C) و ارسال دستورات به نمایشگر با استفاده از پروتکل DDC/CI (در آدرس 0x37) است. در نمایشگرهایی که با SoCهای MSTAR راهاندازی میشوند، دسترسی به حافظه فلش سفتافزار SoC (که از طریق یک گذرگاه SPI دیگر به SoC متصل است) با استفاده از یک پورت برنامهریزی درونسیستمی (ISP) که معمولاً در آدرس 0x49 قرار دارد نیز امکانپذیر است. این ماژول flashrom امکان دسترسی به مورد دوم را از طریق درایور I2C لینوکس فراهم میکند.
مهم: پیش از استفاده از این پروگرامر، نمایشگر باید در حالت آمادهبهکار (standby) قرار داشته باشد، و تنها از طریق کابل VGA به خروجی VGA غیرفعال رایانهای که flashrom را اجرا میکند متصل باشد. این نمایشگر اکیداً و به هیچوجه نباید در طول فرایند بهعنوان نمایشگر تصویر استفاده شود!
باید کنترلکننده DDC/I2C و آدرس I2C مورد استفاده را با ساختار دستوری:
flashrom -p mstarddc_spi:dev=/dev/i2c-X:YY
مشخص کنید که در آن /dev/i2c-X گره دستگاه لینوکسی برای کنترلکننده I2C متصل به کانال DDC نمایشگر است، و YY آدرس (هگزادسیمال) پورت ISP تراشه MSTAR است (معمولاً از آدرس 0x49 استفاده میشود). مثالی که از کنترلکننده I2C به آدرس /dev/i2c-1 و آدرس 0x49 استفاده میکند:
flashrom -p mstarddc_spi:dev=/dev/i2c-1:49
همچنین میتوان با استفاده از پارامتر اختیاری noreset از ارسال دستور ریست که پس از اتمام عملیات flashrom بهطور معمول به نمایشگر فرستاده میشود، جلوگیری کرد. مقدار ۱ مانع از ارسال دستور ریست توسط flashrom میشود. مثالی که در پایان عملیات نمایشگر را ریست نمیکند:
flashrom -p mstarddc_spi:dev=/dev/i2c-1:49,noreset=1
لطفاً توجه داشته باشید در صورتی که در طول عملیات خطایی رخ دهد نیز از ارسال دستور ریست جلوگیری میشود. برای ارسال دستور ریست پس از آن، میتوانید پس از پایان موفقیتآمیز عملیات خواندن/نوشتن مد نظرتان روی فلش، یک بار دیگر flashrom را در حالت شناسایی تراشه (بدون مشخص کردن عملیات) و بدون پارامتر noreset اجرا کنید.
همچنین لطفاً توجه داشته باشید که درایور mstarddc_spi فقط روی لینوکس کار میکند.
پروگرامر ch341a_spi (ch341a_spi programmer)
پروگرامر WCH CH341A در حال حاضر از هیچ پارامتری پشتیبانی نمیکند. فرکانس SPI روی ۲ مگاهرتز ثابت است و بر اساس طراحی دستگاه از CS0 استفاده میشود.
پروگرامر ch347_spi (ch347_spi programmer)
از پارامتر اختیاری spispeed میتوان برای تعیین سرعت SPI استفاده کرد. این پارامتر برای دستگاههای CH347T و CH347F در دسترس است. در صورت عدم تعیین مقدار، سرعت پیشفرض SPI برابر با 15MHz است. ساختار دستور:
flashrom -p ch347_spi:spispeed=value
که در آن value میتواند 60M، 30M، 15M، 7.5M، 3.75M، 1.875M، 937.5K یا 468.75K باشد.
پروگرامر ni845x_spi (ni845x_spi programmer)
از پارامتر اختیاری voltage میتوان برای تعیین ولتاژ ورودی/خروجی (IO) استفاده کرد. این پارامتر برای دستگاه NI USB-8452 در دسترس است. در صورت عدم تعیین یکا، واحد پیشفرض ولت (Volt) است. میتوانید از mV، milliVolt، V یا Volt بهعنوان مشخصکننده یکا استفاده کنید. ساختار دستور:
flashrom -p ni845x_spi:voltage=value
که در آن value میتواند 1.2V، 1.5V، 1.8V، 2.5V، 3.3V یا معادل آنها بر حسب میلیولت باشد.
در صورتی که هیچیک از ولتاژهای IO پشتیبانیشده توسط پروگرامر در محدوده ولتاژ مجاز تراشه فلش شناساییشده نباشد، flashrom عملیات را لغو خواهد کرد (جهت جلوگیری از آسیب به تراشه فلش). میتوانید با دادن مقدار yes به پارامتر ignore_io_voltage_limits این رفتار را نادیده بگیرید (مثلاً در صورتی که از یک مدار مبدل سطح ولتاژ خارجی استفاده میکنید). ساختار دستوری:
flashrom -p ni845x_spi:ignore_io_voltage_limits=yes
میتوانید از پارامتر serial برای تعیین دقیق دستگاه NI USB-845x متصلشده استفاده کنید. باید از شماره سریال ۷ رقمی هگزادسیمال دستگاه خود استفاده نمایید. مثال کاربردی برای انتخاب دستگاهی با شماره سریال 1230A12:
flashrom -p ni845x_spi:serial=1230A12
پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص میکند. ساختار دستور:
flashrom -p ni845x_spi:spispeed=frequency
که در آن frequency باید عددی متناظر با فرکانس مورد نظر بر حسب کیلوهرتز (kHz) باشد. حداکثر frequency برای دستگاه USB-8451 برابر ۱۲ مگاهرتز (12000 kHz) و برای دستگاه USB-8452 برابر ۵۰ مگاهرتز (50000 kHz) است. مقدار پیشفرض، فرکانس ۱ مگاهرتز (1000 kHz) میباشد.
پارامتر اختیاری cs خط انتخاب تراشه (Chip Select) هدف را مشخص میکند. ساختار دستور:
flashrom -p ni845x_spi:csnumber=value
که در آن value باید عددی بین 0 و 7 باشد. بهطور پیشفرض از CS0 استفاده میشود.
پروگرامر digilent_spi (digilent_spi programmer)
پارامتر اختیاری spispeed فرکانس گذرگاه SPI را مشخص میکند. ساختار دستور:
flashrom -p digilent_spi:spispeed=frequency
که در آن frequency میتواند 62.5k، 125k، 250k، 500k، 1M، 2M یا 4M (بر حسب هرتز) باشد. مقدار پیشفرض، فرکانس ۴ مگاهرتز است.
پروگرامر dirtyjtag_spi (dirtyjtag_spi programmer)
پارامتر اختیاری freq فرکانس گذرگاه SPI را مشخص میکند. ساختار دستور:
flashrom -p dirtyjtag_spi:spispeed=frequency
که در آن spispeed میتواند هر مقداری بر حسب هرتز، کیلوهرتز یا مگاهرتز باشد که توسط پروگرامر پشتیبانی میشود. مقدار پیشفرض فرکانس ۱۰۰ کیلوهرتز (100 KHz) است.
پروگرامر jlink_spi (jlink_spi programmer)
این ماژول از دستگاههای SEGGER J-Link و دستگاههای سازگار با آن پشتیبانی میکند.
سیگنال MOSI تراشه فلش باید به پین TDI پروگرامر، MISO به TDO و SCK به TCK متصل شود. سیگنال انتخاب تراشه (CS) تراشه فلش میتواند به پایههای مختلفی از پروگرامر متصل شود که میتوان با ساختار دستوری:
flashrom -p jlink_spi:cs=pin
آن را انتخاب کرد، که در آن pin میتواند یکی از پایههای TRST، RESET یا TMS باشد. پایه پیشفرض برای انتخاب تراشه، RESET است. توجه داشته باشید که هنگام استفاده از RESET، چشمک زدن نشانگر LED به رنگ نارنجی یا قرمز طبیعی است.
علاوه بر این، پایه Tref پروگرامر باید به سطح ولتاژ منطقی تراشه فلش متصل شود. پروگرامر ولتاژ این پایه را اندازهگیری کرده و ولتاژ مرجع را برای مقایسهکنندههای ورودی خود تولید میکند و ولتاژهای خروجی خود را با آن تطبیق میدهد.
ترتیب پایهها (Pinout) برای دستگاههای دارای کانکتور ۲۰ پین JTAG:
+-------+ | 1 2 | 1: VTref 2: | 3 4 | 3: TRST 4: GND | 5 6 | 5: TDI 6: GND +-+ 7 8 | 7: TMS 8: GND | 9 10 | 9: TCK 10: GND | 11 12 | 11: 12: GND +-+ 13 14 | 13: TDO 14: | 15 16 | 15: RESET 16: | 17 18 | 17: 18: | 19 20 | 19: PWR_5V 20: +-------+
اگر بیش از یک دستگاه سازگار متصل باشد، میتوانید با تعیین شماره سریال آن از طریق ساختار دستوری:
flashrom -p jlink_spi:serial=number
مشخص کنید کدامیک باید استفاده شود، که در آن number شماره سریال دستگاه است (که برای نمونه در خروجی lsusb -v یافت میشود).
سرعت SPI را میتوان با ساختار دستوری:
flashrom -p jlink_spi:spispeed=frequency
انتخاب کرد که در آن frequency فرکانس ساعت SPI بر حسب کیلوهرتز (kHz) است. حداکثر سرعت به دستگاه مورد استفاده بستگی دارد.
گزینه power=on میتواند برای فعالسازی منبع تغذیه ۵ ولت (PWR_5V) دستگاه J-Link در طول عملیات فلش استفاده شود.
پروگرامر stlinkv3_spi (stlinkv3_spi programmer)
این ماژول از برنامهریزی فلش SPI از طریق رابط پل SPI در پروگرامر/دیباگر STMicroelectronics STLINK V3 پشتیبانی میکند:
flashrom -p stlinkv3_spi
اگر بیش از یک دستگاه سازگار متصل باشد، میتوانید با تعیین شماره سریال آن از طریق ساختار دستوری:
flashrom -p stlinkv3_spi:serial=number
دستگاه مورد نظر را مشخص کنید، که در آن number شماره سریال دستگاه است (که برای نمونه در خروجی lsusb -v یافت میشود).
سرعت SPI را میتوان با ساختار دستوری:
flashrom -p stlinkv3_spi:spispeed=frequency
تعیین کرد، که در آن frequency فرکانس ساعت SPI بر حسب کیلوهرتز است. در صورتی که فرکانس ارائهشده توسط آداپتور پشتیبانی نشود، نزدیکترین فرکانس پایینترِ پشتیبانیشده استفاده خواهد شد.
پروگرامرهای realtek_mst_i2c_spi، parade_lspcon و mediatek_i2c_spi (realtek_mst_i2c_spi, parade_lspcon and mediatek_i2c_spi programmers)
این پروگرامرها دستورات SPI را از طریق دستگاههای متصل به I2C تونل میکنند. گذرگاه I2C که ارتباط روی آن برقرار میشود باید یا از طریق مسیر دستگاه با گزینه devpath مشخص گردد:
flashrom -p realtek_mst_i2c_spi:devpath=/dev/i2c-8
یا از طریق شماره گذرگاه با گزینه bus مشخص شود که به مسیر دستگاهی مانند /dev/i2c-N اشاره دارد که در آن N شماره گذرگاه مشخصشده است:
flashrom -p parade_lspcon:bus=8
پروگرامر realtek_mst_i2c_spi (realtek_mst_i2c_spi programmer)
این پروگرامر از برنامهریزی فلش SPI برای تراشههای متصل به هابهای Realtek DisplayPort MST پشتیبانی میکند، که خود از طریق I2C قابل دسترسی هستند (تونل کردن دستورات فلش SPI از طریق اتصال I2C هاب MST با میزبان).
حالت برنامهریزی درونسیستمی (In-system programming (ISP) mode)
گزینههای reset_mcu و enter_isp امکان کنترل تغییرات حالت دستگاه را فراهم میکنند، بهطوری که هر کدام میتوانند با 0 یا 1 برای فعال یا غیرفعال کردن تغییر حالت متناظر تنظیم شوند.
مقدار پیشفرض enter_isp برابر 1 است، و در صورت فعال بودن، در ابتدای عملیات دستوراتی را به هاب MST ارسال میکند تا آن را در حالت ISP قرار دهد.
مقدار پیشفرض reset_mcu برابر 0 است، و در صورت فعال بودن، پس از اتمام برنامهریزی یک دستور ریست به هاب MST ارسال میکند تا از حالت ISP خارج شده و سفتافزار خود را مجدداً از فلش بارگذاری نماید.
مقدار پیشفرض allow_brick برابر no است، با این حال اگر مطمئن هستید که تراشه MST دارید، باید صراحتاً روی yes تنظیم شود تا درایور اجازه اجرا پیدا کند.
هاب برای اینکه دسترسی به فلش SPI امکانپذیر باشد باید در حالت ISP قرار داشته باشد، بنابراین معمولاً غیرفعال کردن enter_isp تنها زمانی مفید است که در فراخوانی قبلی از ریست شدن آن در پایان عملیات جلوگیری شده باشد. برای مثال، برای پاک کردن فلش و بازنویسی آن با محتوای یک فایل بدون ریست شدن در این بین (که اگر سعی شود سفتافزار از یک فلش خالی بارگذاری شود ممکن است دستگاه را از کار بیندازد):
flashrom -p realtek_mst_i2c_spi:bus=0,enter_isp=1,reset_mcu=0 -E flashrom -p realtek_mst_i2c_spi:bus=0,enter_isp=0,reset_mcu=1 -w new.bin
پروگرامر parade_lspcon (parade_lspcon programmer)
این پروگرامر از برنامهریزی فلش SPI برای تراشههای متصل به مبدلهای پروتکل/تغییردهنده سطح سیگنال DisplayPort به HDMI شرکت Parade Technologies (موسوم به LSPCON) مانند PS175 پشتیبانی میکند. ارتباط با فلش SPI از طریق LSPCON روی گذرگاه I2C تونل میشود.
پروگرامر mediatek_i2c_spi (mediatek_i2c_spi programmer)
این پروگرامر از برنامهریزی فلش SPI برای تراشههای متصل به برخی از کنترلکنندههای نمایشگر مدیاتک (Mediatek) پشتیبانی میکند، که خود از طریق I2C قابل دسترسی هستند (تونل کردن دستورات فلش SPI از طریق اتصال I2C با میزبان).
این پروگرامر برای پشتیبانی از درایور نمایشگر و مقیاسبخش یکپارچه TSUMOP82JUQ طراحی شده است که در Google Meet Series One Desk 27 استفاده میشود (که نسخهای از ChromeOS را اجرا میکند و از flashrom در اسکریپتهای tsum-scaler-updater همراه سیستمعامل خود بهره میبرد). سایر تراشهها ممکن است از پروتکلهای سازگار استفاده کنند اما با این پروگرامر آزمایش نشدهاند، و ممکن است لازم باشد ورودی/خروجیهای (IO) خارجی تراشه از طریق روشهای غیر flashrom کنترل شوند تا تراشه برای عملکرد مورد انتظار پیکربندی شود.
گزینههای devpath و bus گذرگاه I2C مورد استفاده را همانطور که پیشتر توضیح داده شد انتخاب میکنند. مقدار پیشفرض allow_brick برابر no است و برای کارکرد پروگرامر باید صراحتاً روی yes تنظیم شود. این کار به این دلیل الزامی است که هیچ سازوکاری در درایور برای تشخیص قطعی اینکه آیا یک گذرگاه I2C معین واقعاً به دستگاه پشتیبانیشده متصل است یا خیر، وجود ندارد.
پروگرامر spidriver (spidriver programmer)
این یک رابط سختافزاری SPI مجهز به نمایشگر است (https://spidriver.com) که بهعنوان یک دستگاه سریال USB از نوع FT230X با نرخ باود ثابت ۴۶۰۸۰۰ متصل میشود.
سفتافزار: https://github.com/jamesbowman/spidriver
پارامتر اجباری dev گره دستگاه Excamera Labs SPIDriver را مشخص میکند و پارامتر اختیاری mode حالت گذرگاه SPI را معین میسازد. جداکننده پارامترها کاما (,) است. ساختار دستور:
flashrom -p spidriver:dev=/dev/device,mode=0
که در آن mode میتواند 0، 1، 2 یا 3 باشد. حالت پیشفرض، mode 0 است. تنظیم حالت SPI نیازمند نگارش ۲ از سفتافزار دستگاه است.
پارامتر اختیاری A و/یا B وضعیت پایههای A و B دستگاه SPIDriver را مشخص میکند. این مورد میتواند برای تغییر وضعیت پایههای A یا B به سطح منطقی بالا (high) یا پایین (low) پیش از انتقال استفاده شود. ساختار دستور:
flashrom -p spidriver:a=state,b=state
که در آن state میتواند high یا low باشد. حالت پیشفرض state برابر high است.
پروگرامر nv_sma_spi (nv_sma_spi programmer)
پروگرامر عامل مدیریت سیستم (SMA - System Management Agent) یک SoC است که بهعنوان مدیریت باند جانبی (side band management) روی بردهای سرور Nvidia عمل میکند. یکی از وظایف آن فلش کردن سفتافزار روی سایر قطعات است.
از پارامتر اختیاری cs میتوان برای تغییر شماره انتخاب تراشه (chip select) مورد استفاده بهره برد. این قابلیت اجازه میدهد چندین تراشه به طور همزمان متصل شده و تراشه مورد نظر برای فلش کردن انتخاب گردد:
flashrom -p nv_sma_spi:cs=0
پارامترهای اختیاری bus و devnum مشخص میکنند در صورت حضور چندین SMA، کدام عامل مدیریت سیستم Nvidia انتخاب شود. هر دو پارامتر باید همزمان مشخص شوند:
flashrom -p nv_sma_spi:bus=0,devnum=1
پارامتر اختیاری spispeed فرکانس هدف را بر حسب هرتز تنظیم میکند. عامل مدیریت سیستم Nvidia نزدیکترین فرکانس پشتیبانیشده را بر اساس توانمندیهای خود انتخاب مینماید. در صورتی که spispeed ارائه نشود، فرکانس پیشفرض دستگاه استفاده خواهد شد. مثالی برای تنظیم فرکانس هدف روی 15MHz:
flashrom -p nv_sma_spi:spispeed=15000000
مثالها (EXAMPLES)
برای پشتیبانگیری و بهروزرسانی BIOS خود، این دستورات را اجرا کنید:
flashrom -p internal -r backup.rom -o backuplog.txt flashrom -p internal -w newbios.rom -o writelog.txt
لطفاً مطمئن شوید که پیش از تلاش برای نوشتن، فایل backup.rom را روی یک رسانهٔ خارجی کپی کردهاید. این کار بازیابی آفلاین را آسانتر میکند.
اگر نوشتن ناموفق بود و flashrom اعلام کرد که تراشه در وضعیتی ناشناخته قرار دارد، میتوانید با اجرای دستور زیر نسخهٔ پشتیبان را بازگردانی کنید:
flashrom -p internal -w backup.rom -o restorelog.txt
اگر با مشکلی مواجه شدید، لطفاً با ما تماس بگیرید و فایلهای backuplog.txt، writelog.txt و restorelog.txt را ارائه دهید. برای اطلاعات تماس به بخش اشکالات (BUGS) مراجعه کنید.
وضعیت خروج (EXIT STATUS)
برنامهٔ flashrom در صورت موفقیت با 0 خارج میشود، در بیشتر موارد شکست با 1، اما در صورت شکست فراخوانی mmap() با 3 خارج میشود.
نیازمندیها (REQUIREMENTS)
برنامهٔ flashrom برای پروگرمرهای مختلف به مجوزهای دسترسی متفاوتی نیاز دارد.
- •
- internal
- به دسترسی مستقیم به حافظه نیاز دارد
- دسترسی به فضای پیکربندی PCI
- دسترسی مستقیم به درگاههای I/O (در x86)
- دسترسی به MSR (در x86)
- •
- atavia
- •
- به دسترسی به فضای پیکربندی PCI نیاز دارد
- •
- nic3com, nicrealtek, nicnatsemi
- به دسترسی خواندن از فضای پیکربندی PCI نیاز دارند
- دسترسی مستقیم به درگاههای I/O
- •
- atahpt
- به دسترسی به فضای پیکربندی PCI نیاز دارد
- دسترسی مستقیم به درگاههای I/O
- •
- gfxnvidia, drkaiser, it8212
- به دسترسی به فضای پیکربندی PCI نیاز دارند
- دسترسی مستقیم به حافظه
- •
- rayer_spi
- •
- به دسترسی مستقیم به درگاههای I/O نیاز دارد
- •
- raiden_debug_spi
- •
- به دسترسی به دستگاه USB مربوطه از طریق libusb API نسخهٔ 1.0 نیاز دارد
- •
- satasii, nicintel, nicintel_eeprom, nicintel_spi
- به دسترسی خواندن از فضای پیکربندی PCI نیاز دارند
- دسترسی مستقیم به حافظه
- •
- satamv, atapromise
- به دسترسی خواندن از فضای پیکربندی PCI نیاز دارند
- دسترسی مستقیم به درگاههای I/O
- دسترسی مستقیم به حافظه
- •
- serprog
- •
- به دسترسی TCP به شبکه یا دسترسی فضای کاربری به یک درگاه سریال نیاز دارد
- •
- buspirate_spi, spidriver
- •
- به دسترسی فضای کاربری به یک درگاه سریال نیاز دارد
- •
- ft2232_spi, usbblaster_spi, pickit2_spi
- •
- به دسترسی به دستگاه USB مربوطه از طریق libusb API نسخهٔ 1.0 نیاز دارند
- •
- ch341a_spi, dediprog, nv_sma_spi
- •
- به دسترسی به دستگاه USB مربوطه از طریق libusb API نسخهٔ 1.0 نیاز دارند
- •
- dummy
- •
- به هیچگونه مجوز دسترسی نیاز ندارد
- •
- internal, nic3com, nicrealtek, nicnatsemi, gfxnvidia, drkaiser, satasii, satamv, atahpt, atavia, atapromise, asm106x
- باید با دسترسی کاربر ارشد (superuser/root) اجرا شوند
- به مجوز دسترسی مستقیم (raw access) نیاز دارند
- •
- serprog, buspirate_spi, dediprog, usbblaster_spi, ft2232_spi, pickit2_spi, ch341a_spi, digilent_spi, dirtyjtag_spi, spidriver
- •
- در صورت تنظیم مجوزهای دسترسی مناسب برای دستگاه، در بیشتر سیستمعاملها میتوانند توسط کاربر عادی اجرا شوند
- •
- ogp
- •
- به دسترسی خواندن از فضای پیکربندی PCI و دسترسی مستقیم به حافظه نیاز دارد
- •
- realtek_mst_i2c_spi, parade_lspcon
- •
- به دسترسی فضای کاربری به گذرگاه I2C انتخابشده نیاز دارند
در OpenBSD، میتوانید با قرار دادن:
securelevel=-1
در /etc/rc.securelevel و راهاندازی مجدد سیستم، یا راهاندازی در حالت تککاربره، مجوز دسترسی مستقیم را کسب کنید.
اشکالات (BUGS)
میتوانید اشکالات را گزارش دهید، سؤالات خود را مطرح کنید یا گزارشهای موفقیت را از طریق کانالهای ارتباطی ما ارسال نمایید: تماس: https://www.flashrom.org/Contact
همچنین ما یک سرویس pastebin در https://paste.flashrom.org ارائه میدهیم که برای بهاشتراکگذاری گزارشها (logs) بدون شلوغ کردن کانالهای ارتباطی بسیار سودمند است.
لپتاپها (LAPTOPS)
استفاده از flashrom روی لپتاپهای قدیمیتر خطرناک است و میتواند بهسادگی سختافزار شما را بلااستفاده کند. flashrom تلاش میکند تا تشخیص دهد که آیا روی یک لپتاپ آسیبپذیر در حال اجرا است یا خیر و به دلایل ایمنی، پویش تراشهٔ فلش را محدود میسازد. لطفاً بحث دقیق این موضوع و گزینههای مرتبط با flashrom را در پاراگراف Laptops در زیربخش internal programmer از بخش PROGRAMMER-SPECIFIC INFORMATION و اطلاعات موجود در Info on laptops and EC <> مطالعه فرمایید.
حافظهٔ یکبار برنامهپذیر (OTP) و شناسههای یکتا
برخی تراشههای فلش شامل حافظهٔ OTP هستند که اغلب با نام ثباتهای امنیتی (security registers) مشخص میشوند. این حافظهها معمولاً گنجایشی در محدودهٔ چند بایت تا چندصد بایت دارند و میتوان از آنها برای اعطای شناسهٔ یکتا به دستگاهها و غیره استفاده کرد. flashrom قادر به خواندن یا نوشتن این حافظهها نیست و بنابراین شاید نتواند یک تراشه را بهطور کامل تکثیر کند. برای انواع تراشههایی که وجود حافظههای OTP در آنها شناخته شده است، در صورت شناسایی یک اخطار چاپ میشود.
مشابه حافظههای OTP، شناسههای یکتا، برنامهریزیشده در کارخانه و غیرقابلجعل هستند. این شناسهها بههیچوجه توسط کاربر قابل تغییر نیستند.
مجوز (LICENSE)
برنامهٔ flashrom تحت مجوز عمومی همگانی گنو (GPL)، نسخهٔ 2 قرار دارد. برخی فایلها علاوه بر این تحت هر نسخهٔ بعدی GPL نیز در دسترس هستند.
حق نشر (COPYRIGHT)
لطفاً فایلهای جداگانه را ملاحظه فرمایید.
نویسندگان (AUTHORS)
بیش از ۳۵۰ نویسنده در طول حیات Flashrom در توسعهٔ آن مشارکت داشتهاند. از هر فرد در تالار مشاهیر https://flashrom.org/about_flashrom/hall_of_fame.html قدردانی شده است، یا متادیتای نویسندگان را میتوان در تاریخچهٔ git پیدا کرد.
تمام نویسندگانی که هنوز فعال هستند از طریق فهرست پستی <mailto:flashrom@flashrom.org> در دسترس هستند.
این صفحهٔ راهنما توسط Uwe Hermann <mailto:uwe@hermann-uwe.de>، Carl-Daniel Hailfinger، Stefan Tauner و دیگران نوشته شده است. این اثر تحت شرایط مجوز GNU GPL (نسخهٔ 2 یا بالاتر) منتشر شده است.
| August 27, 2026 |