برق و الکترونیک *دانلود پروژه رایگان
2.28K subscribers
784 photos
96 videos
350 files
654 links
بسمه تعالی
دانلود پروژه و پی سی بی رایگان
Download Telegram
🌟 آموزش سریع دیدن فایل‌ها و پوشه‌ها در ترمینال لینوکس 🌟

وقتی روی پروژه یا پوشه‌ای کار می‌کنید، خوبه بدونید چه فایل‌ها و زیرشاخه‌هایی دارید! 💻

---

### ۱️⃣ دیدن فایل‌ها و پوشه‌های اصلی

ls


🔹 فقط فایل‌ها و پوشه‌های هم‌سطح را نشان می‌دهد.

---

### ۲️⃣ دیدن تمام زیرشاخه‌ها (بازگشتی)

ls -R


🔹 همه پوشه‌ها و زیرشاخه‌ها را نمایش می‌دهد.

---

### ۳️⃣ دیدن جزئیات فایل‌ها

ls -l


🔹 اندازه، تاریخ، مجوزها و مالک فایل‌ها را نشان می‌دهد.

برای تمام زیرشاخه‌ها و جزئیات کامل:

ls -lR


---

### ۴️⃣ نمایش بصری ساختار پوشه‌ها 🌳

۱️⃣ نصب دستور tree:

sudo apt-get install tree


۲️⃣ استفاده:

tree


🔹 همه پوشه‌ها و زیرشاخه‌ها را به صورت درختی نمایش می‌دهد.
🔹 راحت می‌بینید ساختار پروژه چطور سازماندهی شده است.

---

💡 نکته طلایی:
قبل از کپی، جابجایی یا حذف فایل‌ها، با این دستورات یک تصویر کامل از ساختار پوشه‌ها داشته باشید
💡 آموزش Mutex در برنامه‌نویسی چندریسمانی (POSIX / pthread)

🔹 Mutex یعنی چی؟
Mutex مخفف Mutual Exclusion به معنی «排除 متقابل» هست.
تصور کن یک اتاق کوچک داری که فقط یک نفر می‌تونه واردش بشه. وقتی یک نفر داخل اتاقه، بقیه باید پشت در منتظر بمونن تا اون بیاد بیرون. این اتاق همون بخش بحرانی برنامه‌ست و درش همون Mutex هست.

---

🔹 چرا بهش نیاز داریم؟
فرض کن دو نفر همزمان می‌خوان روی یک برگه یادداشت بنویسن. اگر هر دو با هم شروع کنن، نوشته‌ها قاطی میشه و برگه خراب میشه.
در برنامه‌نویسی هم وقتی دو نخ (Thread) همزمان روی یک متغیر یا بافر مشترک کار کنن، داده‌ها خراب میشه یا نتیجه اشتباه درمیاد. Mutex مثل یک نگهبان جلوی در می‌ایسته و میگه: «صبر کن، نوبتت میشه!»

---

🔹 مثال واقعی از پروژه ما
در برنامه دریافت داده از UART:
- یک نخ مخصوص دریافت داده از سریال داریم که داده‌ها رو توی یک بافر ذخیره می‌کنه.
- حلقه اصلی LVGL همون بافر رو می‌خونه و روی صفحه یا ترمینال نمایش میده.

اگر Mutex نذاریم، ممکنه وسط خوندن داده توسط LVGL، نخ UART بیاد و بافر رو تغییر بده. نتیجه؟ متن نصفه‌نیمه یا خراب روی صفحه.
با Mutex، قبل از دستکاری بافر، نخ‌ها قفل می‌گیرن و بعد از اتمام کار، قفل رو آزاد می‌کنن.

---

🔹 کجاها کاربرد داره؟
- وقتی چند نخ به یک فایل مشترک می‌نویسن 📄
- وقتی چند نخ به یک دیتابیس یا متغیر مشترک دسترسی دارن 📊
- وقتی چند نخ از یک سخت‌افزار مشترک استفاده می‌کنن (مثل پورت سریال یا سنسور) ⚙️

---

🔹 نکات مهم
- Mutex فقط در برنامه‌های چندریسمانی معنی داره.
- اگر قفل رو باز نکنی، برنامه قفل می‌کنه (Deadlock) 🔒
- برای داده‌هایی که فقط خونده میشن و تغییر نمی‌کنن، معمولاً Mutex لازم نیست.

---

🔹 نمونه کد ساده
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_lock(&lock); // قفل گرفتن
// بخش بحرانی: فقط یک نخ در این لحظه اینجا رو اجرا می‌کنه
pthread_mutex_unlock(&lock); // آزاد کردن قفل


---

🔥 جمع‌بندی
Mutex مثل یک صف نوبت‌دهی منظم برای نخ‌هاست. باعث میشه همه چیز مرتب و بدون قاطی شدن پیش بره.
در پروژه ما، این یعنی داده‌های UART همیشه سالم و کامل به LVGL می‌رسه و نمایش داده میشه.
🎈 بزرگترین گناه کبیره

🎀 قَالَ آيَةُ اَللهِ اَلْعُظْمَى اَلْإِمَامُ اَلْبَاقِرُ صَلَوَاتُ اَللهِ عَلَيْهِ : أَكْبَرُ الْكَبَائِرِ صَاحِبُ الْقَوْلِ الَّذِی يَقُولُ أَنَا أَبْرَأُ مِمَّنْ يَبْرَأُ مِنْ أَبِی بَكْرٍ وَ عُمَرَ .

❤️ حضرت آیت الله العظمی امام باقر صلوات الله علیه می فرمایند : بزرگترین گناه کبیره برای آن شخصی است که می گوید من تبرّی می‌جویم از کسی که از ابوبکر و عمر بیزاری می جوید.

📕مستدرك الوسائل جلد ۱۱ صفحه ۳۵۸ حدیث ۱۳۲۵۶
📌 آموزش دستور `grep` در لینوکس

🔎 دستور grep یکی از پرکاربردترین دستورات لینوکس برای جستجو در متن فایل‌هاست.
به کمک این دستور می‌تونید هر کلمه یا عبارت خاصی رو داخل فایل‌ها پیدا کنید.

---

### مثال‌های کاربردی:

🔹 ۱. جستجو در یک فایل خاص

grep "STORAGE_TYPE" config.txt


➡️ این دستور بررسی می‌کنه آیا کلمه‌ی STORAGE_TYPE در فایل config.txt وجود دارد یا نه.

---

🔹 ۲. جستجو در همه فایل‌های یک شاخه

grep "STORAGE_TYPE" *


➡️ همه‌ی فایل‌های موجود در پوشه‌ی فعلی بررسی می‌شن.

---

🔹 ۳. جستجو در کل شاخه و زیرشاخه‌ها

grep -R "STORAGE_TYPE" .


* -R یعنی بازگشتی (recursive) → همه زیرشاخه‌ها هم بررسی می‌شن.
* . یعنی از همین پوشه فعلی شروع کن.

---

🔹 ۴. نمایش شماره خط همراه با نتیجه

grep -Rn "STORAGE_TYPE" .


* -n شماره خط رو هم نشون می‌ده.
* -R همه زیرشاخه‌ها رو جستجو می‌کنه.

---

🔹 ۵. فقط بررسی وجود یا عدم وجود

grep -Rq "STORAGE_TYPE" .
echo $?


➡️ خروجی echo $? اگر 0 بود یعنی پیدا شد، اگر 1 بود یعنی پیدا نشد.

---

### 🛠 نکات حرفه‌ای:

* برای نادیده گرفتن بزرگی یا کوچکی حروف (case-insensitive):

grep -Ri "storage_type" .


* برای جستجو در فایل‌هایی با پسوند خاص (مثلاً فقط .c و .h):

grep -Rn "STORAGE_TYPE" --include="*.c" --include="*.h" .


---

به همین راحتی می‌تونید هر چیزی رو داخل فایل‌ها و پروژه‌های لینوکسی پیدا کنید.
grep یکی از ابزارهایی هست که هر کاربر لینوکس باید یاد بگیره! 🚀
## 🧠 آموزش کاربردی binwalk در پروژه T113-S3

📌 موضوع: بررسی محتوای فایل‌های ایمیج در پروژه‌های لینوکسی با چیپ Allwinner T113-S3
🛠 ابزار کلیدی: binwalk
🎯 هدف: فهمیدن اینکه داخل فایل‌های .img مثل boot.img یا tina_t113-mq_r_uart3.img دقیقاً چی هست و چرا سیستم ممکنه بوت نشه

---

### 🔍 binwalk چیه؟

binwalk یه ابزار قدرتمند برای آنالیز فایل‌های باینریه. مخصوصاً وقتی با ایمیج‌های سیستم‌عامل، بوت‌لودر، یا فایل‌سیستم‌های فشرده سروکار داریم. باهاش می‌تونیم بفهمیم:

- آیا کرنل (zImage) داخل ایمیج هست؟
- آیا فایل‌سیستم مثل SquashFS, UBIFS, یا YAFFS وجود داره؟
- آیا ramdisk یا initrd داخل boot.img هست یا نه؟
- آیا ایمیج ناقصه یا با تنظیمات برد ناسازگاره؟

---

### ⚙️ نصب binwalk

sudo apt update
sudo apt install binwalk


---

### 🧪 مثال واقعی از پروژه T113-S3

فرض کن یه فایل boot.img ساختی و می‌خوای ببینی آیا کرنل و ramdisk داخلش هست یا نه:

binwalk -e boot.img


📥 خروجی نمونه:

0x0       Android bootimg, kernel size: 4247424 bytes
0x824 Linux kernel ARM boot executable zImage
0x460C gzip compressed data


یعنی کرنل داخلشه
ولی اگه ramdisk فقط چند بایت باشه، یعنی rootfs نداره → سیستم بعد از OP-TEE گیر می‌کنه

---

یا مثلاً می‌خوای ببینی داخل ایمیج نهایی tina_t113-mq_r_uart3.img چه فایل‌سیستمی هست:

binwalk -e tina_t113-mq_r_uart3.img


📥 خروجی نمونه:

0x7A3400  Squashfs filesystem, version 4.0


❗️ ولی اگه توی env.txt نوشته باشی `rootfstype=ubifs`، این mismatch باعث می‌شه کرنل نتونه rootfs رو mount کنه → بوت ناقص

---

### 💡 نکته حرفه‌ای

با binwalk می‌تونی قبل از فلش کردن ایمیج مطمئن بشی که:

- فایل‌ها کاملن
- نوع فایل‌سیستم با تنظیمات env.cfg هماهنگه
- کرنل و dtb داخل boot.img هستن
- و هیچ چیز حیاتی مثل sboot یا ramdisk جا نیفتاده

---

### 🎯 نتیجه‌گیری

در پروژه‌های embedded مثل T113-S3، binwalk یه ابزار حیاتی برای دیباگ بوته. اگه سیستم بعد از OP-TEE گیر می‌کنه یا کرنل بالا نمیاد، اولین چیزی که باید چک کنی همین binwalkه.

بزن binwalk رو نصب کن، ایمیج رو باز کن، و ببین واقعاً چی داخلشه—قبل از اینکه وقتت رو با فلش‌های تکراری تلف کنی 😎
🎓 تفاوت nand_root در لینوکس‌های نهفته مثل Tina Linux

اگه با بردهایی مثل T113-S3 کار می‌کنی، احتمالاً توی فایل env یا bootargs دیدی که بعضی‌ها نوشتن:

nand_root=/dev/ubiblock0_5


و بعضی‌ها هم:

nand_root=ubi0_5


🤔 خب فرق این دو تا چیه؟ کدومش رو باید استفاده کنیم؟

---

🔹 ubiblock0_5
این یه دیوایس بلوک‌محور هست که از volume شماره ۵ در UBI ساخته شده.
📦 مناسب برای فایل‌سیستم‌های فقط خواندنی مثل squashfs یا cramfs
وقتی rootfs از نوع squashfs باشه، باید از این استفاده کنی

---

🔹 ubi0_5
این فقط یه volume منطقی در سیستم UBI هست
📝 مناسب برای فایل‌سیستم‌های قابل نوشتن مثل ubifs
وقتی می‌خوای rootfs قابل نوشتن باشه، باید از این استفاده بشه

---

📌 پس انتخاب درست بستگی به نوع فایل‌سیستم rootfs داره:

- اگه rootfstype=squashfs باشه → بنویس nand_root=/dev/ubiblock0_5
- اگه rootfstype=ubifs باشه → بنویس nand_root=ubi0_5

---

💡 نکته حرفه‌ای:
برای دیدن نوع فایل‌سیستم فعلی، توی ترمینال برد بزن:

cat /proc/cmdline


و دنبال rootfstype= بگرد
🧠 آموزش ذخیره‌سازی تنظیمات در برد T113-S3 با استفاده از UDISK

اگه با بردهای نهفته مثل T113-S3 کار می‌کنی و سیستم‌عاملت با Tina Linux راه‌اندازی شده، حتماً برات پیش اومده که بخوای تنظیمات برنامه‌ات رو یه جایی ذخیره کنی که بعد از ریست شدن برد هم باقی بمونه. چون فایل‌سیستم rootfs معمولاً از نوع squashfs هست و فقط خواندنیه، نمی‌تونی تنظیمات رو اونجا بنویسی. ولی یه راه حرفه‌ای و مطمئن وجود داره: استفاده از پارتیشن UDISK

---

📦 UDISK چیه و چرا مناسب ذخیره‌سازیه؟

در فایل پارتیشن‌بندی sys_partition_nor.fex معمولاً یه پارتیشن به نام UDISK تعریف می‌شه که روی فلش NAND سوار می‌شه و با فایل‌سیستم ubifs به صورت خواندن/نوشتن mount می‌شه. مسیرش معمولاً اینه:

/mnt/UDISK


و توی ترمینال برد می‌تونی با این دستور ببینی که mount شده یا نه:

mount | grep UDISK


اگه خروجی چیزی مثل این بود، یعنی آماده‌ی استفاده‌ست:

/dev/ubi0_8 on /mnt/UDISK type ubifs (rw,...)


---

📝 ساخت فایل تنظیمات تک‌خطی

برای ساخت یه فایل ساده که یه مقدار تنظیمات داخلش باشه، این دستور رو بزن:

mkdir -p /mnt/UDISK/configs
echo "mode=debug" > /mnt/UDISK/configs/myapp.conf


این فایل داخل مسیر /mnt/UDISK/configs ساخته می‌شه و بعد از ریست شدن برد هم باقی می‌مونه

برای دیدن محتواش:

cat /mnt/UDISK/configs/myapp.conf


---

📄 ساخت فایل تنظیمات چندخطی

اگه بخوای چند خط تنظیمات داخل فایل بذاری، چند روش مختلف داری. اینجا چندتا از راحت‌ترین‌هاش رو می‌گم:

🔹 روش اول: استفاده از echo با >>

echo "wifi_ssid=BraveNet" >> /mnt/UDISK/configs/myapp.conf
echo "wifi_pass=12345678" >> /mnt/UDISK/configs/myapp.conf
echo "mode=production" >> /mnt/UDISK/configs/myapp.conf


🔹 روش دوم: استفاده از heredoc

cat <<EOF > /mnt/UDISK/configs/myapp.conf
wifi_ssid=BraveNet
wifi_pass=12345678
mode=production
EOF


🔹 روش سوم: استفاده از vi یا nano (اگر نصب باشه)

vi /mnt/UDISK/configs/myapp.conf


بعد از باز شدن ویرایشگر، متن رو بنویس و با ESC و :wq ذخیره کن

---

🔁 تست بعد از ریست برد

بعد از ریست شدن کامل برد، دوباره وارد ترمینال بشو و بزن:

cat /mnt/UDISK/configs/myapp.conf


اگه محتوا باقی مونده بود، یعنی تنظیماتت به‌درستی ذخیره شدن و قابل استفاده هستن

---

🔐 نکته امنیتی

اگه تنظیماتت شامل رمز یا اطلاعات حساس هستن، بهتره دسترسی فایل رو محدود کنی:

chmod 600 /mnt/UDISK/configs/myapp.conf


---

🎯 جمع‌بندی کاربردی

پارتیشن UDISK بهترین جا برای ذخیره‌سازی تنظیمات، لاگ‌ها، و داده‌های دائمی در بردهای T113-S3 هست. با چند دستور ساده می‌تونی فایل بسازی، محتوا بنویسی، و بعد از هر بوت دوباره بخونی. این روش کاملاً پایدار و امنه و توی پروژه‌های صنعتی هم استفاده می‌شه
🔐 آموزش سطح دسترسی فایل‌ها در برد T113-S3 با لینوکس Tina

وقتی با بردهای نهفته مثل T113-S3 کار می‌کنی، خیلی مهمه بدونی چطور فایل‌هایی مثل تنظیمات یا لاگ‌ها رو طوری بسازی که فقط برنامه‌ات بتونه بخونه یا تغییر بده. مخصوصاً وقتی از پارتیشن UDISK استفاده می‌کنی که قابل نوشتن و پایدار هست، باید حواست به امنیت فایل‌ها باشه

لینوکس برای کنترل دسترسی به فایل‌ها از سیستم permission استفاده می‌کنه. هر فایل سه سطح دسترسی داره: مالک فایل، گروه فایل، و سایر کاربران. هرکدوم از این‌ها می‌تونن اجازه‌ی خواندن، نوشتن یا اجرا داشته باشن

مثلاً وقتی اینو می‌بینی:

-rw-r--r--


یعنی مالک فایل می‌تونه بخونه و بنویسه، گروه فقط می‌تونه بخونه، و سایر کاربران هم فقط می‌تونن بخونن

برای تغییر این سطح دسترسی از دستور chmod استفاده می‌شه. مثلاً:

chmod 600 /mnt/UDISK/configs/myapp.conf


این دستور یعنی فقط مالک فایل می‌تونه بخونه و بنویسه، و هیچ‌کس دیگه‌ای نمی‌تونه فایل رو ببینه یا تغییر بده

عدد 600 یعنی:

مالک: خواندن و نوشتن
گروه: هیچ دسترسی
سایر کاربران: هیچ دسترسی

اگه فایل تنظیماتت شامل رمز وای‌فای یا اطلاعات حساس باشه، این سطح دسترسی خیلی مهمه چون جلوی دسترسی ناخواسته رو می‌گیره

برای دیدن سطح دسترسی فعلی فایل، اینو بزن:

ls -l /mnt/UDISK/configs/myapp.conf


خروجی باید چیزی مثل این باشه:

-rw------- 1 root root 78 Sep 8 10:59 myapp.conf


یعنی فقط کاربر root می‌تونه فایل رو بخونه و بنویسه

اگه برنامه‌ات با کاربر دیگه‌ای اجرا می‌شه، باید مالک فایل رو تغییر بدی. مثلاً:

chown myuser:myuser /mnt/UDISK/configs/myapp.conf
chmod 640 /mnt/UDISK/configs/myapp.conf


با این تنظیمات، کاربر myuser می‌تونه فایل رو بخونه، ولی بقیه نمی‌تونن

این روش‌ها باعث می‌شن فایل‌های تنظیماتت هم امن باشن، هم پایدار، و هم فقط توسط برنامه‌ات قابل استفاده باشن