Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Kernel

С этим тегом используют

Linux Все
18 постов сначала свежее
6
DungeonLords
5 месяцев назад

Linux kernel contrib⁠⁠

Linux kernel contrib
[моё] Kernel Linux Git Система контроля версий Commits Картинка с текстом
0
2
tribukaunl.pru
tribukaunl.pru
1 год назад
Компьютер это просто

Kernel 41(63)⁠⁠

kernel 41(63) - ошибка, которая не дает спокойно жить многим пользователям ПК. И, что самое обидное, совершенно новых ПК, имеющих вполне себе совместимое и недешевое железо.

В сети можно найти решения проблемы, о которых настолько уверенно говорят знатоки, что поневоле верится. Неисправный блок питания. Неисправное питание материнки. Проблема проводов от блока.

Это вполне себе возможные варианты. Но истины не знает никто. Есть люди, и их немало, которым не помогает ни замена БП, ни тому подобные махинации. В чем дело, не знает толком никто.

Один из вариантов решения этой проблемы - отключение устройства high definition audio от nvidia, так как его аудиодрайвер конфликтует с драйвером звуковой карты.

Второй вариант - отключение dep, службы выполнения данных.

Третий - снижение питания процессора на 1 процент.

Это вполне рабочие способы. И если вы уже поменяли БП, и проблема осталась, попробуйте решить ее так. Может быть, кому-то будет полезно.

Компьютерная помощь Компьютер Компьютерное железо Ошибка Kernel Сборка компьютера Текст
7
938
monobogdan
monobogdan
1 год назад
TECHNO BROTHER

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android⁠⁠

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост



Для многих разработчиков приложений далеко не секрет, что экосистема Android не предполагает написание полностью нативных приложений: в этой платформе очень многое завязано на Java и без ART можно запустить только простые службы без какого-либо интерфейса. Однако, есть один способ писать практически под «голый» Linux, не перекомпилируя ядро и при этом пользоваться самыми интересными фишками устройства без оверхеда в виде тяжелого Android: ускорение 3D-графики (OpenGLES), микшер звука, ввод с различных устройств, OTG, Wi-Fi и если очень постараться — даже 3G. Это открывает множество разных интересных применений старым устройствам: «железо» смартфонов зачастую гораздо мощнее современных недорогих одноплатников. Сегодня я покажу вам, как написать и запустить программу, которая полностью написанное на C без Android, на No-Name Android-смартфоне практически без модификаций. Интересно? Жду вас в статье!

❯ Что нам нужно знать?


Даже относительно старые устройства флагманского сегмента обладают весьма неплохими характеристиками. Зачастую они гораздо мощнее современных дешевых одноплатников и могут выполнять самые разные задачи: эмуляция консолей, работа в качестве плееров, да даже просто сделать настольные часики самому было бы здорово. Но есть одно но — это Android. Платформа от Google может тормозить даже на достаточно мощном железе, что резко ограничивает потенциально возможные применения подобных гаджетов. Да и многие программисты не особо хотят заморачиваться и учить API Android для реализации каких-то своих проектов.

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Но конечно же, есть один способ писать нативные программы, при этом используя все ресурсы смартфона/планшета. Для этого нужно понимание, как работает процесс загрузки на многих Android-гаджетах:

  1. Первичный загрузчик (BootROM) инициализирует какую-то часть периферии и загружает вторичный загрузчик (U-boot/LK).

  2. Вторичный загрузчик, используя определенные аргументы (например зажата ли какая-то кнопка) выбирает, с какого раздела грузить ядро системы.

  3. После загрузки ядра Linux и подключения ramdisk начинается выполнение процессов системы.


Как раз в третьем пункте и лежит ключ к способу, который будем использовать мы. Дело в том, что в смартфоне обычно есть несколько boot-разделов и у каждого свой образ ядра Linux со своим ramdisk. Первый из них — это знакомый моддерамboot.img, который отвечает за загрузку системы и инициализирует железо/монтирует разделы/подготавливает окружение к работе (.rc файлы) и запускает главный процесс Android —zygote. При этом используется собственная реализация init от Android.

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Второй, не менее знакомый многим раздел —recovery, отвечает за так называемый режим восстановления, в котором мы можем сбросить данные до заводских настроек/очистить кэши или прошить кастомную прошивку. Вероятно, многие из вас замечали, насколько быстро ваш девайс загружает этот режим, гораздо быстрее, чем загрузка обычного Android. И именно в его реализацию нам нужнозаглянуть(я намеренно выбрал бранч версии 2.3 — т.е Gingerbread для простоты):

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


А recovery оказывается самой обычной нативной программой, написанной на C со своим небольшим фреймворком для работы с графикой и вводом. В процессе загрузки режима recovery, скрипт запускает одноименную программу в /sbin/, благодаря которому мы видим простую и понятную менюшку. Так почему бы не использовать этот раздел в своих целях и не написать какую-нибудь нативную программу самому?

Как я уже говорил выше, в этом режиме доступны многие аппаратные возможности вашего смартфона, за исключением модема. Используя полученную информацию, предлагаю написать наше небольшое приложение под Android-смартфон без Android сами!

❯ Подготавливаем окружение


В первую очередь, хотелось бы отметить, что программы под «голый» смартфон можно писать не только на C/C++. Нам доступен как минимум FPC, который довольно давно умеет компилировать голые бинарники под Android. Кроме того, мы можем портировать маленькие embedded-версии интерпретаторов таких языков, как lua, micropython и duktape (JS).

Однако в случае нативных программ, есть два важных правила, которые необходимо понимать. Во-первых, в Android используется собственную реализацию стандартной библиотеки libc — bionic, в то время как на десктопных дистрибутивах используется glibc. Между собой они не совместимы — именно поэтому вы не можете просто взять и запустить консольную программу для Raspberry Pi, например.

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


А второе правило заключается в том, что начиная с версии 4.1, Androidтребует, чтобы все нативные программы были скомпилированы в режиме -fPIE — т. е. выходной код должен не зависеть от адреса загрузки программы в виртуальную память. Для этого достаточно добавить ключ -fPIE, однако учтите, что если вы разрабатываете программу под Android 4.0 и ниже, то fPIE наоборот необходимо убрать — старые версии Androidнеподдерживают такой способ генерации кода и будут вылетать с Segmentation fault.

Для разработки нам понадобится ndk — там есть все необходимые заголовочники и компиляторы для нашей работы. Я используюndk r9c, поскольку в свежих версиях Google регулярно может что-то сломать.
ndk-build, к сожалению, здесь работать не будет, поэтому Makefile придется написать самому. Я составил полностью рабочий Makefile, который без проблем скомпилирует валидную программу, вам остаётся лишь поменять NDK_DIR.

NDK_DIR = D:/android-ndk-r11c/

TOOLCHAIN_DIR = $(NDK_DIR)toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/

GCC = $(TOOLCHAIN_DIR)arm-linux-androideabi-g++

PLAT_DIR = $(NDK_DIR)platforms/android-17/arch-arm/usr/

LINK_LIBS = -l:libEGL.so -l:libGLESv1_CM.so

OUTPUT_NAME = cmdprog

build:

$(GCC) -I $(PLAT_DIR)include/ -L $(PLAT_DIR)lib/ -fPIE -Wl,-dynamic-linker=/sbin/linker $(LINK_LIBS) -static -o $(OUTPUT_NAME) main.cpp micro2d.cpp


После этого пишем простенькую программу, которая должна вывести «Test» и компилируем её.

❯ Деплоим на устройство


Несмотря на то, что грузиться мы будем в режим recovery, нам всё равно будет доступен adb, через который мы сможем запускать и отлаживать нашу программу. Это очень удобно, однако по умолчанию adb включен только в TWRP, который нужно сначала найти или портировать под ваш девайс (на большинство старых брендовых устройств порты есть, на нонейм придется портировать самому — гайды есть в интернете). Под ваше устройство есть TWRP? Отлично, распаковываете recovery.img с помощью так называемой «кухни» (MTKImgTools как вариант):

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Открываете init.recovery.service.rc и убираете оттуда запуск одноименной службы (можно просто оставить файл пустым).

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Запаковываем образ обратно тем же MTKImgTools и прошиваем флэшером для вашего устройства — в моём случае, это SP Flash Tool (MediaTek):

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Заходим в режим рекавери и видим зависшую заставку устройства и звук подключения устройства к ПК. Если у вас установлены драйвера, то вы сможете без проблем зайти в adb shell и попасть в терминал для управления устройством. Теперь можно закинуть программу — прямо в корень рамдиска (записывается программа в ОЗУ, но при переполнении, телефон уйдет в ребут — осторожнее с этим). Пишем:

adb push cmdprog /: adb shell chmod 777 cmdprog ./cmdprog


И видим результат. Наша программа запускается и работает!

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Это просто отлично. Однако я ведь обещал вам, что мы напишем программу, которая сможет выводить графику и обрабатывать ввод, предлагаю перейти к практической реализации!

❯ Выводим графику


Для вывода графики без оконных систем, мы будем использовать API фреймбуфера Linux, которое позволяет нам получить прямой доступ к массиву пикселей на экране. Однако учтите, что этот способ полностью программный и может оказаться тормозным для вашего приложения: скорость работы прямо-пропорциональна разрешению дисплея вашего устройства. Чем выше разрешение, тем ниже филлрейт. В моём случае, матрица была с разрешением 960x540, 32млн цветов, IPS — очень недурно, согласны?

Фреймбуфер Linux может работать с самыми разными форматами пикселя, имейте это ввиду. На некоторых устройствах может быть 16-битный формат (262 тысячи цветов, RGB565), на моём же оказался 32х-битный с выравниванием по строкам (имейте это также ввиду). 32х битный формат. Работать с ним легко: открываем устройство /dev/graphics/fb0, получаем параметры (разрешение, формат пикселя), делаем mmap для отображения буфера с пикселями на экране в память нашего процесса и выделяем второй буфер для двойной буферизации дабы избежать неприятных мерцаний.

void m2dAllocFrameBuffer()

{

fbDev = open(PRIMARY_FB, O_RDWR);

fb_var_screeninfo vInfo; fb_fix_screeninfo fInfo;

ioctl(fbDev, FBIOGET_VSCREENINFO, &vInfo);

ioctl(fbDev, FBIOGET_FSCREENINFO, &fInfo); fbDesc.width = vInfo.xres;

fbDesc.height = vInfo.yres;

fbDesc.pixels = (unsigned char*)mmap(0, fInfo.smem_len, PROT_WRITE, MAP_SHARED, fbDev, 0); f

bDesc.length = fInfo.smem_len; fbDesc.lineLength = fInfo.line_length;

backBuffer = (unsigned char*)malloc(fInfo.smem_len); memset(backBuffer, 128, fInfo.smem_len);

printf("Framebuffer is %s %ix%ix%i\n", (char*)&fInfo.id, fbDesc.width, fbDesc.height, vInfo.bits_per_pixel, fInfo.type);

}


Если не сделать предыдущий шаг и запускать нашу программу параллельно с recovery, то они обе будут пытаться друг друга «перекрыть» — эдакий race condition:

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


После этого пишем простенькие функции для блиттинга картинок (в том числе с альфа-блендингом). В инлайнах и критичных к скорости функциям лучше не делать условия на проверку границ нашего буфера — лучше «отрезать» ненужное еще на этапе просчета ширины/высоты:

__inline void pixelAt(int x, int y, byte r, byte g, byte b, float alpha)

{

if(x < 0 || y < 0 || x >= fbDesc.width || y >= fbDesc.height) return;

unsigned char* absPtr = &backBuffer[(y * fbDesc.lineLength) + (x * 4)];

if(alpha >= 0.99f)

{

absPtr[0] = b;

absPtr[1] = g;

absPtr[2] = r;

}

else {

absPtr[0] = (byte)(b * alpha + absPtr[0] * (1.0f - alpha));

absPtr[1] = (byte)(g * alpha + absPtr[1] * (1.0f - alpha));

absPtr[2] = (byte)(r * alpha + absPtr[2] * (1.0f - alpha));

} absPtr[3] = 255; }

for(int i = 0; i < image->height; i++)

{

for(int j = 0; j < image->width; j++)

{

byte* ptr = &image->pixels[((image->height - i) * image->width + j) * 3]; pixelAt(x + j, y + i, ptr[0], ptr[1], ptr[2], alpha);

}

}


И загрузчик TGA:

CImage* m2dLoadImage(char* fileName) {

FILE* f = fopen(fileName, "r");

printf("m2dLoadImage: Loading %s\n", fileName);

if(!f)

{

printf("m2dLoadImage: Failed to load %s\n", fileName);

return 0;

}

CTgaHeader hdr;

fread(&hdr, sizeof(hdr), 1, f);

if(hdr.paletteType)

{

printf("m2dLoadImage: Palette images are unsupported\n");

return 0;

}

if(hdr.bpp != 24) {

printf("m2dLoadImage: Unsupported BPP\n");

return 0;

}

byte* buf = (byte*)malloc(hdr.width * hdr.height * (hdr.bpp / 8));

assert(buf);

fread(buf, hdr.width * hdr.height * (hdr.bpp / 8), 1, f);

fclose(f);

CImage* ret = (CImage*)malloc(sizeof(CImage));

ret->width = hdr.width;

ret->height = hdr.height;

ret->pixels = buf;

printf("m2dLoadImage: Loaded %s %ix%i\n", fileName, ret->width, ret->height);

return ret;

}


И попробуем вывести картинку:

m2dInit();

test = m2dLoadImage("test.tga");

test2 = m2dLoadImage("habr.tga");

while(1)

{

m2dClear();

m2dDrawImage(test, 0, 0, 1.0f);

m2dDrawImage(test2, tsX - (test2->width / 2), tsY - (test2->height / 2), 0.5f);

m2dFlush();

}

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост



Не забываем про порядок пикселей в TGA (BGR, вместо RGB), меняем канали b и r местами в pixelAt и наслаждаемся картинкой на большом и классном IPS-дисплее:

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост
Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Производительность отрисовки не очень высокая, однако если оптимизировать код (копировать непрозрачные картинки сразу сканлайнами и убрать проверки в инлайнах), то будет немного шустрее. Google для подобных целей сделали собственный простенький софтрендер —libpixelflinger.

Есть вариант для быстрой и динамичной графики: использовать GLES, который без проблем доступен и из recovery. Однако, насколько мне известно (в исходники драйверов посмотреть не могу), указать фреймбуфер в качестве окна не получится, поэтому в качестве Surface для рендертаргета у нас будет служить Pixmap (так называемый off-screen rendering), которому нужно задать правильный формат пикселя (см. документацию EGL). Рисуем туда картинку с аппаратным ускорением и затем просто копируем в фреймбуфер с помощью memcpy.

❯ Обработка нажатий


Однако, ни о каких GUI-программах не идёт речь, если мы не умеет обрабатывать нажатия на экране с полноценным мультитачем! Благо, даже механизм обработки событий в Linux очень простой и приятный: мы точно также открываем устройство и просто читаем из него события в фиксированную структуру. Эта черта мне очень нравится в архитектуре Linux!

Каждое устройство, которое может передавать данные о нажатиях, находится в папке /dev/input/ и имеет имя вида event. Как узнать нужный нам event? Нам нужен mtk-tpd — реализация драйвера тачскрина от MediaTek (у вашего чипсета может быть по своему), для этого загружаемся в Android и пишем getevent. Он покажет доступные в системе устройства ввода — в моём случае, это event2:

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост


Из event можно читать как в блокирующем, так и не в блокирующем режиме, нам нужен второй. Более того, в них можно инжектить события, что я показывал в статье про создание своей консоли из планшета с нерабочим тачскрином:

// Open input device evDev = open(INPUT_EVENT_TPD, O_RDWR | O_NONBLOCK);


После этого, читаем события с помощью read и обрабатываем их. На устройствах с резистивным тачскрином, передается просто ABS_POSITION_X, на устройствах с поддержкой нескольких касаний — используетсяпротокол MT. Когда пользователь нажал на экран, посылается нажатие BTN_TOUCH с значением 1, а когда отпускает — соответственно BTN_TOUCH с значением 0. Разные драйверы тачскрина используют разные координатные системы (насколько я понял), в случае MediaTek — это абсолютные координаты на дисплее (вплоть до ширины и высоты). На данный момент, я реализовал поддержку только одного касания, но при желании можно добавить трекинг нескольких нажатий:

void m2dUpdateInput()

{

input_event ev;

int ret = 0;

while((ret = read(evDev, &ev, sizeof(input_event)) != -1))

{

if(ev.code == ABS_MT_POSITION_X) tsState.x = ev.value;

if(ev.code == ABS_MT_POSITION_Y) tsState.y = ev.value;

if(ev.code == BTN_TOUCH) tsState.isPressed = ev.value == 1;

}

tsState.cb(tsState.isPressed, tsState.x, tsState.y); }


Теперь мы можем «возить» логотип Хабра по всему экрану:

void onTouchUpdate(bool isTouching, int x, int y) {

if(isTouching)

{

tsX = x;

tsY = y;

}

}

int main(int argc, char** argv) {

printf("Test\n");

m2dInit();

test = m2dLoadImage("test.tga");

test2 = m2dLoadImage("habr.tga");

printf("Volume: %i %i\n", vol, muteState);

m2dAttachTouchCallback(&onTouchUpdate);

while(1) {

m2dUpdateInput();

m2dClear();

m2dDrawImage(test, 0, 0, 1.0f);

m2dDrawImage(test2, tsX - (test2->width / 2), tsY - (test2->height / 2), 0.5f);

m2dFlush();

}

return 0;

}

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android Гаджеты, Смартфон, Linux, Телефон, IT, Хакеры, Hacking, Программирование, Embedded, C++, Одноплатный компьютер, Nix, Unix, Ядро, Kernel, Android, Длиннопост



В целом, это уже можно назвать минимально-необходимым минимумом для взаимодействия с устройством и использованию всех его возможностей на максимум без Android. Более того, такой метод заработает почти на любом устройстве, в том числе и китайских NoName, где ни о каких исходниках ядра и речи нет. Теперь вы можете попытаться использовать ваше старое Android-устройство для чего-нибудь полезного без необходимости изучать API Android.

❯ Звук, модем и другие возможности


Для звука нам придётся использовать ALSA — поскольку эта подсистема звука сейчас используется в большинстве устройств на Linux. Судя по всему, тут есть режим эмуляции старого и удобного OSS, поскольку устройства /dev/snd/dsp присутствует. Однако, вывод в него какого либо PCM-потока не даёт ничего, поэтому нам пригодится ALSA-lib.

Другой вопрос касается модема и сети. И если Wi-Fi ещё можно поднять (wpa_supplicant можно взять из раздела /system/), то с модемом будут проблемы — нет единого протокола по общению с ним и кое-где, чтобы его заставить работать, нужно будет немного попотеть. Не стесняйтесь изучать исходники ядра (MediaTek охотно делится реализацией вообще всего — там и RIL, и драйвер общения с модемом) и смотреть интересующие вас фишки!

❯ Заключение


Как мы с вами видим, у старых девайсов все еще есть перспективы стать полезными в какой-либо сфере даже без Android на борту. На тех устройствах, где нет порта Ubuntu или обычного десктопного Linux, всё равно сохраняется возможность писать нативные программы и попытаться приносить пользу.

Не стесняйтесь лезть и изучать вендорские исходники — это даёт понимание, как работают устройства изнутри. Собственно, благодаря такому ежедневному копанию исходников системы и появилась данная статья! :)

Показать полностью 14
[моё] Гаджеты Смартфон Linux Телефон IT Хакеры Hacking Программирование Embedded C++ Одноплатный компьютер Nix Unix Ядро Kernel Android Длиннопост
138

Продвиньте ваш пост

Перейти
Партнёрский материал Реклама
specials
specials

Нужно больше внимания к постам? Есть способ!⁠⁠

Иногда даже самый интересный материал теряется в потоке новых записей. Если ваш пост остался незамеченным, измените ситуацию. Для этого на Пикабу есть продвижение.

Все просто: оставьте заявку в форме, добавьте ссылку на пост и выберите подходящий бюджет. Все. Ваш пост покажут во всех лентах на специальных позициях. Ну а вы получите дополнительную аудиторию и отклик пользователей.

Продвинуть пост

Продвижение Посты на Пикабу Текст
10
HoShiMin
HoShiMin
1 год назад

BeeSynth - плеер для PC-спикера⁠⁠

BeeSynth - плеер для PC-спикера Rust, Программирование, Музыка, Плеер, Синтезатор, Спикер, Пищалка, Драйвер, Kernel

Хочу представить вам плеер и синтезатор для системного спикера, написанный на Rust.

Поддерживает воспроизведение MP3, WAV, FLAC, трекерной музыки - и вообще всего, что может быть сконвертировано библиотекой ffmpeg в WAV-PCM. Для улучшения качества звука поддерживает обработку звука с помощью фильтров: например, фильтры высоких и низких частот, а также извлечение из сигнала самых значимых гармоник с помощью преобразования Фурье.

Также поддерживается многоканальное воспроизведение собственной музыки, написанной в текстовом виде в специальном формате.

Ссылка на GitHub: https://github.com/HoShiMin/BeeSynth


Как это работает: доступ к спикеру осуществляется с помощью так называемых портов ввода-вывода - специального интерфейса в процессоре, выделенного для работы с чипсетом и периферийными устройствами. Этот интерфейс сводится к двум машинным инструкциям: in и out, которые обычно доступны только в режиме ядра (Ring0) - в привилегированном режиме, к которому у пользовательских программ доступа нет. А значит, нам нужен драйвер, который или откроет для нашей программы доступ к портам в пользовательский режим (юзермод, он же Ring3), или будет служить «мостиком» между Ring3 и Ring0, позволяя юзермоду отправлять запросы в ядро и работать с портами оттуда.

В проекте поддерживаются оба способа при использовании драйвера InpOut:
1. Отправляем ему запросы на работу с портами.
2. С его помощью патчим уровень привилегий, с которым наш поток может работать с портами, с Ring0 на Ring3 - таким образом, поток получает возможность работать с портами из юзермода напрямую - без необходимости запрашивать драйвер.

Научились работать со спикером: теперь необходимо понять, что играть. Самый удобный формат для воспроизведения - WAV, т.к. представляет собой массив сэмплов фиксированной длительности. Каждый сэмпл - амплитуда сигнала в момент времени, соответствующий номеру сэмпла в массиве. Поэтому все музыкальные форматы мы предварительно конвертируем в WAV с помощью библиотеки ffmpeg.

Спикер имеет только два состояния: напряжение приложено (мембрана поднята вверх) и напряжение снято (мембрана опущена). Таким образом, мы можем воспроизводить звук с глубиной дискретизации всего в 1 бит, в отличие от типовых WAV-файлов с глубиной дискретизации в 16 бит, поэтому нужен такой алгоритм ресэмплинга, который позволит добиться приемлемого качества звука. И здесь возможны варианты: можно использовать широтно-импульсную модуляцию (PWM), чтобы научить мембрану занимать промежуточные положения между 0 и 1, настолько быстро подавая и снимая напряжение, чтобы мембрана не успевала доходить до граничных положений, но сделать это очень сложно из-за различий в физических свойствах разных спикеров в разных компьютерах. Поэтому в проекте реализован другой подход: положение переключается на каждый амплитудный пик или на каждую амплитудную впадину в сигнале, что даёт уверенное качество звука и хорошую громкость.

Остался последний штрих: можно улучшить качество звука, отрезав самые низы, которые спикер не воспроизведёт, и верхи, которые приводят к шуму. Сделать это можно, используя фильтры низких и высоких частот.

В итоге мы можем воспроизводить любой звук в относительно хорошем качестве. Технические детали и более подробное описание можно найти в README на страничке проекта на гитхабе.

Показать полностью
[моё] Rust Программирование Музыка Плеер Синтезатор Спикер Пищалка Драйвер Kernel
5
194
monobogdan
monobogdan
2 года назад
TECHNO BROTHER

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера⁠⁠

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост

К сожалению, в наше время многие старые, но весьма неплохие по характеристикам гаджеты отправляются напрямую в помойку, и их владельцы не подозревают, что им можно найти применение. Сервер, мультимедийная-станция, да даже просто как TV-приставка — люди в упор не замечают сфер, где старенький планшет мог бы быть полезен. Но как быть, если посвящаешь жизнь портативным гаджетам, кодингу и копанию в железе? Правильно: сделать довольно мощную игровую консоль из старого планшета самому! Сегодня вам расскажу, как я сделал свою портативную приставку из планшета с нерабочим тачскрином, Raspberry Pi Pico и 8 кнопок! За рабочим результатом прячется несколько дней работы: поиск UART на плате, разработка контроллера геймпада на базе RPi Pico, написание приложения-сервиса, которое слушает события и отправляет их в подсистему ввода Linux в обход Android. Интересно? Тогда жду вас под катом!

❯ Мотивация


Прошло уже практически 10 лет с того момента, как у меня появилась моя первая портативная консоль. Несмотря на то, что я был заядлым ПК-игроком, я уже успел посмотреть на PS3 и PSP, но денег на их покупку у меня особо не было, да и к тому времени уже был в наличии Android-планшет. Но к моему 13-летию в 2014 году, когда я ходил и выбирал себе будущий девайс на день рождения, отец и мама решили подарить мне мою первую портативную консоль. Изначально, я уговаривал её купить мне целых два девайса, но бюджет был ограничен 4.000 рублей, а я хотел взять смартфон Fly IQ239 и консоль JXD S601 одновременно:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост


Однако, увидев здоровую 7-дюймовую консоль в магазине TREC (думаю, жители южной части РФ помнят такой), мама уговорила меня взять именно её, мотивируя это «ну и чего ты будешь тыкаться в этот мелкий экран? Возьми большую». После покупки гаджета, я был доволен: играл какие-то игрушки с ретро-платформ, устанавливал игры на Android, сидел в ВК через Kate Mobile. Что еще нужно было школяру? Однако, планшет прожил у меня недолго: с очередного лага я психанул и ударил по нему кулачком, унеся на тот свет и дисплей и тачскрин. Так консолька и пролежала в подвале около 8 лет. Впрочем, мне продолжали импонировать подобные устройства и в прошлом году я купил и написал про несколько подобных девайсов.

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



Несколько месяцев назад, мой читатель Кирилл Севостьянов с Хабра прислал мне HTC HD2 в качестве донора и планшет Prestigio PMP7170B3G, который был рабочим, но… у него отказал тачскрин. Я всё думал, чего бы с ним сделать и решил реализовать игровую консольку своими руками из подручных средств. Идея крутилась в голове довольно давно, но реализовал я её только сейчас.

❯ Что нам нужно сделать?


Итак, что должно быть у портативной консоли? Чипсет, дисплей, звук, ОС — это всё нам уже предоставляет планшет. Нам остаётся лишь сделать свой геймпад. Давайте подумаем, что нам будет нужно для того, чтобы его сделать и передавать от него события на планшет:

  • Контроллер для геймпада: тут нам подойдет практически любой микроконтроллер, который работает от 3.3в. Выбор большой: Arduino Pro Mini 3.3v, ESP32, RPi Pico. Я остановился на последнем: недавно я взял себе две штучки «пощупать» их — и они мне очень понравились!

  • Физический интерфейс: с планшетом нужно как-то общаться. У нас есть три варианта: USB (не факт, что поддержка преобразователей включена в ядре), UART и SPI/I2C на пятачках тачскрина (потребуют написания драйвера т. к. в android-устройствах нет прямого доступа к SPI/I2C из userland'а). Я остановился на UART: его легко найти на большинстве китайских планшетов, а если не получилось — то на помощь может прийти схема платы.

  • Программная реализация: как это будет работать? Я решил реализовать геймпад в виде сервиса на Android, который слушает состояния кнопок с UART и «инжектит» события напрямую в драйвер ввода. Таким образом, поддержка нашего геймпада появляется даже в самой системе — можно управлять менюшкой или приложениями как с клавиатуры!


    С планом определились, пора начать с программной части: сначала нам обязательно понадобится ROOT-доступ. Его получение на разных девайсах отличается — на prestigio уже был порт CWM и я просто поставил SuperSU. Без ROOT доступа мы не сможем использовать UART!

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост


Теперь нам нужно найти пятачки UART на плате. Разведен он не везде, но в случае устройств на MediaTek — почти всегда, ещё и пятачки подписаны. На моём планшете он нашёлся сразу: был между двух металлических экранов и соответствовал 4-ому каналу UART. Получить к нему доступ можно в /dev/ttyMT3. Я использую ESP32 в качестве UART преобразователя: подпаиваемся к RX/TX, запускаем putty и заходим в adb shell. Определяем бодрейт (скорость) нашего UART порта — на MediaTek он обычно равен 921600, на других чипсетах — 115200. Пытаемся что-то вывести и хоба — мы уже можем «поболтать» с планшетом!

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост

❯ Приложение-сервис


Итак, у нас уже есть доступ к UART и мы можем общаться с планшетом из внешнего мира. Но получить события с кнопок пол дела, нужно их ещё и послать в систему. Для этого есть целых три способа:

  1. InputManager.injectInputEvent — именно этим методом пользуется команда input, которую вы можете использовать через adb. Но увы, он работает только при наличие разрешения INJECT_EVENTS, который доступен только системным приложениям — находятся они в /system/app и подписаны тем же сертификатом, что и остальная прошивка.

  2. Модуль uinput дает возможность создать виртуальное устройство ввода и посылать события из userland'а — т. е. из прикладного приложения. У моего планшета было устройство /dev/uinput, но lsmod показывал, что сам модуль не загружен. Так что отметаем — он есть не везде.

  3. Прямой инжект событий в character устройство — весьма грязный хак, который позволяет инжектить события, не притворяясь системным приложением, но имеет некоторые ограничения. Именно его я и выбрал и о ограничениях ниже.


Сначала нам нужно узнать, какие кнопки поддерживают загруженные устройства ввода в системе. Для этого используем команду getevent -li. Там есть разные устройства ввода, в том числе и тачскрин (если вам нужно симулировать нажатия на экран), мне же подошёл драйвер физических кнопок mtk-kpd. Он занимается обработкой кнопок громкости, включения и т. п. Тут важно обратить внимание на то, что если попытаться послать кнопку, которое устройство не реализует (например пробел), то ничего не произойдет:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



Инжект событий я писал на C, т. к. это требовало прямой записи input_event, а в Java прокинул его через Jni. Концепция простая: открываем устройство /dev/input/event2 и посылаем в него события ввода и синхронизации (это обязательно!), которые затем Android читает и обрабатывает:

#include <linux/uinput.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <android/log.h>

#include <jni.h>

int uinput;

extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_init(JNIEnv *env, jclass clazz) {

uinput = open("/dev/input/event2", O_WRONLY);

__android_log_print(ANDROID_LOG_DEBUG , "Test", uinput >= 0 ? "Open event OK" : "Failed to open event"); }

void emit(int fd, int type, int code, int val) {

struct input_event ie; ie.type = type;

ie.code = code; ie.value = val;

ie.time.tv_sec = 0;

ie.time.tv_usec = 0;

write(fd, &ie, sizeof(ie)); }

extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_sendKeyEvent(JNIEnv *env, jclass clazz, jint key_code, jboolean pressed) {

__android_log_print(ANDROID_LOG_DEBUG , "Test", "Send");

emit(uinput, EV_KEY, key_code, (bool)pressed ? 1 : 0);

emit(uinput, EV_SYN, SYN_REPORT, 0);

}

Основной обработкой занимается сервис, который я реализовал в отдельном потоке: он слушает события с UART и посылает соответствующие изменения состояния через sendKeyEvent. На вход приходят простые сообщения вида:

U L где U/D — нажато, не нажато, а L — однобайтовый идентификатор кнопки. В случае L — это влево, R — вправо и т. п. Вся доступная раскладка хранится в словаре. Причём само чтение из UART реализовано костылем с чтением «чужого» stdout, т. к. android-приложения не умеют сами по себе работать с root правами. В теории, это могло дать неприятный оверхед, но на практике никакого серьезного инпут лага это не создает. Не забываем сделать устройство event записываемым — ставим ему права 777:

package com.monobogdan.inputservicebridge;

public class InputListener extends Service {

private static final int tty = 3;

private InputManager iManager;

private Map<Character, Integer> keyMap;

private Method injectMethod;

private Process runAsRoot(String cmd)

{

try {

return Runtime.getRuntime().exec(new String[] { "su", "-c", cmd });

}

catch (IOException e)

{

e.printStackTrace();

return null;

}

}

@override

public void onCreate() {

super.onCreate();

// According to linux key map (input-event-codes.h)

keyMap = new HashMap<>();

keyMap.put('U', 103);

keyMap.put('D', 108);

keyMap.put('L', 105);

keyMap.put('R', 106);

keyMap.put('E', 115);

keyMap.put('B', 158);

keyMap.put('A', 232);

keyMap.put('C', 212);

InputNative.init();

try {

runAsRoot("chmod 777 /dev/input/event2").waitFor();

} catch (InterruptedException e) {

throw new RuntimeException(e);

}

Executors.newSingleThreadExecutor().execute(new Runnable() {

@override

public void run() {

Process proc = runAsRoot("cat /dev/ttyMT" + tty);

BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));

while(true)

{

try {

String line = reader.readLine();

if(line != null && line.length() > 0) {

Log.i("Hi", "run: " + line);

boolean pressing = line.charAt(0) == 'D';

int keyCode = keyMap.get(line.charAt(2));

Log.i("TAG", "run: " + keyCode);

InputNative.sendKeyEvent(keyCode, pressing);

}

}

catch(IOException e)

{

e.printStackTrace();

}

/*try {

Thread.sleep(1000 / 30);

} catch (InterruptedException e) {

e.printStackTrace();

}*/

}

}

});

}

@override

public IBinder onBind(Intent intent) {

return null;

}

}

Таким образом, если мы отправляем с ПК «D L» — система считает, что мы зажали стрелку влево, а U L — считает что мы отпустили. Но если mtk-kpd поддерживает стрелки и еще некоторые действия без каких либо проблем, то enter в список обрабатываемых кнопок не входит: придется мудрить! И тут нам приходит на помощь механизм трансляции кодов кнопок в действия: они хранятся в специальных файлах .kl в /system/usr/keylayout/. Я назначил DPAD_CENTER на… кнопку регулировки громкости звука! Ну, а почему бы и нет. :) Таким образом можно переназначить уже имеющиеся кнопки громкости на, например, start/select.

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост

❯ Геймпад


После того, как сервис был готов и отлажен, нужно было реализовать хардварную часть проекта — сам геймпад. В качестве контроллера я, как уже говорил, выбрал Raspberry Pi Pico на базе МК RP2040 — бодреньком контроллере с двумя ARM Cortex-M0 ядрами. Стоит копейки, а в отличии от ESP'шек, его SDK не такое перегруженное и выглядит более приближенным к bare-metal.

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



На данный момент, я решил развести все кнопки на бредборде — макетной плате без пайки, т. к. макеток для пайки у меня под рукой не было. Сделал примитивный геймпад:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



Развел на соответствующие GPIO:

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



И написал примитивную прошивку, которая отслеживает состояние кнопок. В прошивке точно так же есть словарь, задающий ассоциацию между физическими пинами и «виртуальными» кнопками. При нажатии или отжатии кнопки, программа изменяет стейт и отсылает новое состояние планшету.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "pico/stdlib.h"

#include "pico/time.h"

#include "hardware/uart.h"

struct keyMap

{

int gpio;

char key;

bool pressed;

int lastTick;

};

keyMap keys[] = {

{

15,

'L',

false,

0

},

{

14,

'U',

false,

0

},

{

13,

'D',

false,

0

},

{

12,

'R',

false,

0

},

{

11,

'E',

false,

0

},

{

10,

'B',

false,

0

},

{

20,

'A',

false,

0

},

{

21,

'C',

false,

0

}

};

#define KEY_NUM 8

int main() {

stdio_init_all();

uart_init(uart0, 921600);

gpio_set_function(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART);

gpio_set_function(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART);

sleep_ms(1000); // Allow serial monitor to settle

for(int i = 0; i < KEY_NUM; i++)

{

gpio_init(keys[i].gpio);

gpio_set_dir(keys[i].gpio, false);

gpio_pull_up(keys[i].gpio);

}

while(true)

{

int now = time_us_32();

for(int i = 0; i < KEY_NUM; i++)

{

char buf[5];

buf[1] = ' ';

buf[3] = '\n';

buf[4] = 0;

if(!gpio_get(keys[i].gpio) && !keys[i].pressed && now - keys[i].lastTick > 15500)

{

buf[0] = 'D';

buf[2] = keys[i].key;

puts(buf);

keys[i].lastTick = now;

keys[i].pressed = true;

continue;

}

if(gpio_get(keys[i].gpio) && keys[i].pressed && now - keys[i].lastTick > 15500)

{

buf[0] = 'U';

buf[2] = keys[i].key;

puts(buf);

keys[i].pressed = false;

keys[i].lastTick = now;

}

}

}

}

Собираем всё вместе и тестируем. Хоба, всё работает, мы можем перемещаться по менюшке используя наш геймпад!

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера Смартфон, Телефон, Идея, Своими руками, Arduino, Embedded, Встраиваемые системы, Планшет, Игры, Консоли, Самоделки, Моддинг, Android, Linux, Java, C++, Kernel, Покупка, Raspberry pi, Микроконтроллеры, Видео, Длиннопост



А почему бы не попробовать поиграть в какую-нибудь игру? Ну мы же консоль вроде делаем: берём эмулятор NES, биндим кнопки в настройках и наслаждаемся игрой в Марио!

❯ Заключение


Реализация этого проекта заняла у меня не так уж и много времени: всего около 3-х дней работы по вечерам. Вероятно кто-то спросит: «а чего ты просто Bluetooth геймпад не купил?». Так это не прикольно ведь. Гораздо приятнее играть в девайс, к которому ты приложил руку сам. Более того, не у всех старых планшетов есть BT. Обошёлся на данной стадии проект недорого: планшет мне подарили бесплатно (точно также у вас дома может лежать подобный), RPi Pico — 350 рублей, кнопки по 10 рублей/штучка.

В целом, я сам по себе обожаю копаться в различных железках и их софтварной части (вспомнить хотя-бы статью про перекомпиляциюu-boot из вендорских исходников для нонейм консоли), а созидать что-то свое вообще вызывает какие-то нереальные всплески эндорфина — оно и понятно! :)

Однако несмотря на то, что мы уже имеем рабочий «прототип», проект далёк от завершения: я намерен довести его до конца и окончательно перевоплотить старый планшет в автономную игровую консоль (и рассказать об этом во второй части статьи). Для этого мне понадобится распечатать корпус и кнопки на 3D-принтере. К сожалению, у меня в городе ни у кого особо нет 3D-принтеров, поэтому начну копить на Ender 3, а от вас, читателей, с удовольствием почитаю мнение в комментариях и советы касательно выбора принтера!

Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать еженедельные статьи про моддинг различных гаджетов!

Показать полностью 10 1
[моё] Смартфон Телефон Идея Своими руками Arduino Embedded Встраиваемые системы Планшет Игры Консоли Самоделки Моддинг Android Linux Java C++ Kernel Покупка Raspberry pi Микроконтроллеры Видео Длиннопост
33
2
alimkos
2 года назад

Как удалить NT kernel & system⁠⁠

Всем привет, только что удалил этот хитрый вирус, впервые сталкиваюсь с таким забавным вирусом. В чем его суть, он нагружает пк на фоне пока не открыт диспетчер задач, так же он скрывается под Realtek HD. Находится он в programData\realtek HD правда эти папки скрыты (скрытые файлы защищенные системой). Как включить их отображение разберётесь сами.


Я пытался удалить его антивирусником но столкнулся с проблемой, антивирус запрещен к установке, этот вирус внес в реестр запрет на установку десятка разных антивирусов.

Решается следующим образом:

1. Запускаем редактор реестра regedit

2. Переходим - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun\

3. В этом разделе будет список нумерованных параметров, каждый из которых запрещает запуск какой-либо программы. Удаляем все те, которые требуется разблокировать.

4. Устанавливаем нужную программу и радуемся!


И так антивирус установлен но он нифига не помогает, НО, я нашел 100% решение. Нужно установить программу unlocker, она принудительно удаляет файлы. Удалите этой программой папку с вирусом и перезагрузите пк.


А почему это забавный вирус?

добавил запрет на установку антивирусов

если зайти в папку с вирусом то он автоматически ее закроет и опять запретит отображать скрытые папки

заходя на некоторые сайты с решением данной проблемой закрывает к чертям собачим браузер


В общем буду рад если это кому-то поможет)

Показать полностью
Вирус Realtek Kernel System Текст
1
1207
OpenNET
OpenNET
2 года назад
GNU/Linux

В ядре Linux найдена забытая заплата, влияющая на производительность CPU AMD⁠⁠

В ядре Linux найдена забытая заплата, влияющая на производительность CPU AMD Linux, Технологии, AMD, Kernel

В ядро Linux 6.0, релиз которого ожидается в следующий понедельник, принято изменение, решающее проблемы с производительностью систем на процессорах AMD Zen. Источником падения производительности оказался код, добавленный 20 лет назад для обхода аппаратной проблемы в некоторых чипсетах. Аппаратная проблема давно устранена и не проявляется в актуальных чипсетах, но старый обход проблемы был забыт и стал источником снижения производительности на системах на базе современных CPU AMD. Новые системы с CPU Intel старый обходной манёвр не затрагивает, так как доступ к ACPI в них осуществляется при помощи отдельного драйвера intel_idle, а не общего драйвера processor_idle.


Обходной манёвр был добавлен в ядро в марте 2002 года для блокирования проявления ошибки в чипсетах, связанной с отсутствием должной установки состояние простоя (idle) из-за задержки обработки сигнала STPCLK#. Для обхода проблемы в реализации ACPI добавлялась дополнительная инструкция WAIT, замедляющая процессор чтобы чипсет успевал перейти в состояние простоя. При проведении профилирования с использованием инструкций IBS (Instruction-Based Sampling) на процессорах AMD Zen3 было выявлено, что процессор проводит значительное время, выполняя заглушку, которая приводит к неверной трактовке состояния нагрузки на процессор и выставлению более глубоких режимов сна (C-State) обработчиком cpuidle.


Подобное поведение отражается в снижении производительности при нагрузках, в которых часто чередуются состояния простоя (idle) и активности (busy). Например, при использовании патча, отключающего обходной манёвр, средние показатели теста tbench увеличиваются с 32191 MB/s до 33805 MB/s.

Показать полностью
Linux Технологии AMD Kernel
76
389
Блог компании
Nuri.CEMASTER
Nuri.CEMASTER
1 месяц назад
Серия Каргобандистка Нури

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис⁠⁠

Привет, я Нури. Работаю в логистической компании. Занимаюсь финансами, клиентами, организацией работы менеджеров и бухгалтерии. Мой муж — генеральный директор. Он держит связь с ключевыми партнерами и ищет новых, организовывает работу склада, нанимает сотрудников. Расскажу о нюансах работы нашей логистической компании в Китае.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Весь смысл работы компании можно уместить в один абзац. 

Мы помогаем клиентам из России, Казахстана, Кыргызстана выкупить товар с китайских маркетплейсов 1688, Taobao, а также напрямую у поставщиков в Китае. Принимаем оплату наличными (перевод в рублях, USDT, наличка в Москве), покупаем товар, принимаем его на своем складе в г. Фошань (30 км от Гуанчжоу), проверяем, упаковываем и организовываем доставку в любой город России, Казахстана, Кыргызстана. Короче, карго с доп. услугами: поиск товаров, индивидуальный бизнес-тур и минимальным заказом от $300 и 15 кг. 

Кажется, что логистика — это простой бизнес. На самом деле нюансов очень много. Даже просто получить деньги из России с 2022 года — это невообразимый квест. Потому что российские банки говорят одно, китайские — другое, а в результате приходится пользоваться криптовалютой USDT и преимуществами нашего юридического лица в Гонконге. 

Из достижений: за 5 лет работы мы сменили склад с территорией 1000 м² на склад 6000 м².

Старый склад.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

 Наш старый склад

Новый склад.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

 Наш новый склад

Внутри одного из двух складов.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

 Внутри нового склада

Причина появления карго (мнение китайцев)

Китайские поставщики, публикующие карточки товаров на 1688 и Taobao, открывшие шоурумы на оптовых рынках, не думают о работе с иностранцами. Они редко присутствуют на B2B-площадке Alibaba или маркетплейсе AliExpress. Их цель — продавать товары оптом и в розницу на территории Китая. 

У каждой китайской фабрики много партнеров. Посредников, которые перепродают товары иностранцам на Alibaba, AliExpress, Made in China, оставляя себе процент. 

Иностранцы хотят покупать товары в Китае дешевле. Они ищут контакты фабрик и торговых компаний с минимальным количеством посредников. Особенно тщательно поставщиков выбирают предприниматели, которые не хотят платить проценты перекупщикам. Ведь каждый уплаченный процент — это упущенная прибыль. 

Несмотря на развитие отношений, даже в 2025 году боссы фабрик в Китае не готовы принять оплату из-за границы и не организовывают международную доставку. Иностранные клиенты для них остаются сложными и непонятными. Они говорят: «нам это не надо, у меня есть партнеры». 

В этих условиях выросли логисты или карго-компании. Бизнесы, которые являются посредниками между фабрикой или торговой фирмой в Китае и иностранным покупателем. 

Как мы оказались в логистике

Всю свою сознательную жизнь муж работал на иностранцев. Находил товар в Китае, организовывал выкуп, встречал клиентов, помогал с проверкой и доставкой. Все начиналось с продажи биноклей туристам. 

Сначала мы открыли торговую компанию на деньги, которые заняли у родственников. Росли и развивались. В 2018 году уже продавали технику Xiaomi в качестве официальных дистрибьюторов.

У нас было несколько розничных торговых точек и оптовый отдел по продаже видеорегистраторов, запчастей к смартфонам, аксессуаров, самих смартфонов, устройств для охранной и пожарной сигнализации и других технических штуковин. Брали заказы, находили поставщиков, оформляли заказы, упаковывали и отправляли.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Я в магазине 10 лет назад

Когда заказов стало очень много — закрыли розничные торговые точки и полностью перешли на работу с оптовиками, а потом расширились до логистической фирмы. Сейчас работаем практически со всеми товарами.

Все начинается с поиска поставщика 

Лучшие способы найти поставщика любого товара в Китае: 

1. Маркетплейсы 1688 и Taobao.

2. Poizon — сервис, который продает оригинальные брендовые товары.

3. B2B-площадки Alibaba и Made in China.

4. Оптовые рынки в Китае. 

5. Узкоспециализированные выставки и крупные ярмарки. 

Иногда клиенты не хотят заниматься поиском самостоятельно и обращаются к нам за услугами: 

1. Платный поиск поставщика. Логисты часто ее оказывают. Мы тоже. Находим поставщиков онлайн ($50) или с выездом на рынок, выставку, фабрику ($400). Предоставляем несколько контактов потенциальных поставщиков. 

2. Индивидуальный бизнес-тур в Китай для поиска поставщика. От группового бизнес-тура отличается тем, что все 3—5 дней посвящены достижению бизнес-цели, согласованной с клиентом заранее. Цена $1500 (поездка с менеджером), $2500 (с руководителем, со мной или мужем). Организовываем предварительный поиск поставщиков, трансфер, перевод, помощь с заключением контракта. 

Большинство наших клиентов находят поставщиков самостоятельно на 1688 и Taobao. Мы предоставляем подробные инструкции по регистрации на маркетплейсах и поиску любого товара в Китае. 

Прием заявок на выкуп

Вначале мы работали с оптовиками от $1000 и 30 кг, потом от $500 и 20 кг, сейчас от $300 и 15 кг. 

Как и многие другие компании, использовали формы в таблице Excel для приемки заказа. Это было неудобно как для клиента, так и для менеджера, который обрабатывал эти заказы.

Обработка таблиц Excel вручную повышает риск ошибки. И они были. Менеджеры не могли обработать заявки быстро и точно. Пришлось что-то менять.

Увеличение количества клиентов привело к созданию сайта-парсера Panda-Order.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Panda-Order собирает заявки

Panda — сборщик карточек товаров с 1688 и Taobao. В отличие от многих таких проектов стоимость товара не изменяется. Нет никаких скрытых процентов. Наш парсер — это просто альтернатива формы в таблице Excel. Клиенты оформляют заказы как в интернет-магазине. 

Менеджеры

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Менеджеры компании на 8 Марта

Каждый менеджер в нашей компании знает русский и китайский язык на разговорном уровне. 

Задачи менеджера: 

  • помочь клиенту разобраться с Panda; 

  • проконсультировать по вопросу оформления заказа; 

  • передать адрес склада, если клиент покупает товар сам; 

  • принять номер заказа (ORD) с Panda-Order; 

  • уточнить информацию у поставщиков; 

  • выставить клиенту счет и принять деньги за товар;

  • направить заказ на выкуп;

  • передать информацию менеджеру по выкупу;

  • помочь с выбором упаковки и маршрута доставки; 

  • прислать счет на оплату доставки; 

  • поддерживать контакт с клиентом.

Ноутбук и смартфон — главный рабочий инструмент менеджера логистической фирмы. Они могут работать удаленно, но у нас есть отдельный офис на территории склада. 

Работа менеджера не всегда стабильна по нагрузке. В низкий сезон менеджер хочет работать, но заказов нет. В высокий сезон менеджер завален заказами, а я думаю, что надо расширить команду и мы не справляемся. А потом снова спад заказов. И так каждый год.

Зарплата менеджера от $800 до $1500. Она зависит от количества обработанных заявок в месяц. Поэтому в низкий сезон они мотивируют нас запускать больше рекламы, а в высокий мы мотивируем их работать точнее и быстрее.

Переводы в Китай 

С 2022 года перевести деньги из России в Китай, если у клиента нет иностранного счета, сложно. Еще сложнее сделать это официально без подключения к процессу менял (обменников). 

Чем жестче становились санкции, тем сложнее было организовать безопасный перевод. 

До февраля 2022 года написали статью о переводах в Китай. Обновили в середине 2022, 2023 и 2024. В этом году мечтаем обновить так, чтобы SWIFT стал доступен или появилась прочная альтернатива криптовалюте.

В 2025 году лучше всего работает схема: криптовалюта USDT — Гонконг, — Китай. А еще клиенты могут оплатить в России рублями на карту (переводом), а также наличными в Москве. Если вы хотите платить с р/с, то вам нужна белая доставка. 

Мы не принимаем оплату на счет AliPay физического лица и оплачиваем покупки на 1688 с Taobao официально со счета компании. Тем самым являемся официальным партнером Alibaba как юридическое лицо. Это помогает нам без проблем возвращать товары и выигрывать споры с поставщиками. Администрация маркетплейса практически всегда на нашей стороне.  

Не пользуемся услугами менял и не принимаем переводы «друг заплатит», так как это может привести к блокировке счета и потере клиентом денег.

Выкуп товаров 

Клиент выбрал товар и перевел нам деньги на его покупку. Услуга покупки товара в интересах клиента называется «выкупом». Выкуп может быть с 1688, Taobao, а также от любой торговой компании и фабрики в Китае. 

Во время выкупа менеджер уточняет у продавца наличие товара, точность цены, сроки отгрузки и делает оплату, если все хорошо. Нет товара или нужной комплектации — связывается с клиентом для принятия решения о замене поставщика. 

Мое рабочее место.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Так я работаю

У менеджера похожая ситуация. Вся работа в компьютере и смартфоне.

Если надо выкупить товар с 1688 и Taobao, то клиент пользуется нашим парсером Panda, чтобы сформировать заказ.

Если выкуп с Poizon или у поставщика напрямую (без маркетплейса), то клиент связывается с менеджером, просит адрес склада и сообщает менеджеру, какие товары должны прийти на склад.

Скорость выкупа

Зависит от расторопности поставщика. 

  1. Как быстро ответит менеджер поставщика на наш запрос? 

  2. Когда он передаст информацию на склад? 

  3. Какова скорость работы склада поставщика?

Бывает, что наш менеджер несколько дней ждет ответа от поставщика… Менеджер поставщика может написать: «Этой позиции нет» или «Эту позицию нужно подождать». А сколько ждать? Не пишет или пишет какую-то дату, а потом извиняется и переносит отгрузку. 

Все это время нервничает клиент. 

Контролирует выкупы отдельные сотрудники. Их задача — оперативно решать вопросы с поставщиками.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

 Менеджер склада за работой

Китайская внутренняя логистика подвержена сильным колебаниям. Если хотите быстрый выкуп и доставку без задержек, то делайте заказы в марте, апреле, июле, августе и начале сентября.

Старайтесь не оформлять заказы перед или сразу после Китайского Нового года, мирового Нового года, кантонской ярмарки и праздника Середины осени. Будут задержки с выкупом и доставкой внутри Китая.

Доставка товара по Китаю 

Города Фошань и Гуанчжоу практически слились в единую агломерацию. Если посмотрите на карту, то непонятно, где заканчивается один город и начинается другой. Юридически наш склад находится в г. Фошань (20 км от Гуанчжоу). 

Доставка товаров по Китаю ВСЕГДА платная. Даже если поставщик пишет «доставка бесплатно», просто цена доставки уже включена в стоимость товара. 

Поставщики отправляют товары по Китаю двумя способами: 

1. Через доступные и удобные курьерские службы Zhongtong, SF Express, Yuantong, Jitu, Yunda, Jingdong(中通,顺丰, 圆通,极兔,韵达,京东), которые работают без трек-номера, транспортные компании Neng, Leapfrog, Jingdong, Yimi, Xinfeng (安能,跨越,京东,宜米,信丰).

2. Очень редко поставщики отправляют товар своей машиной без трек-номера. Так делают, когда склад поставщика находится недалеко от нас. Иногда машины заказываем мы сами, чтобы забрать товар (эта опция доступна только для заказов через Panda).

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Привезли товар на склад

Обычно товары по Китаю доставляют в течение 3 дней даже за 2000+ км. Внутренняя логистика работает очень организованно и быстро, но не в праздники и после них. Перед, после и во время праздников Середины осени и Китайского Нового года доставка работает с задержками и сбоями. 

Бывает так, что в аккаунте 1688 клиент видит надпись «товар доставлен», когда на самом деле на склад его еще не привезли. Клиент пишет менеджеру: «Где товар? Не вижу его принятым в личном кабинете?». Менеджер отвечает, что товар пока не привезли… Клиент переживает.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Работники склада в офисе

На самом деле товар у курьера в машине. Он может отметить товар доставленным, чтобы отчитаться перед руководством и не получить штраф. А товар курьер доставит уже на следующий день.

Приемка товара на склад

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Разгрузка товара на складе

Задача менеджера по выкупу и приемке товара на склад: 

1. Убедиться, что привезли товар по верному адресу. 

2. Взять документы у водителя. 

3. Посмотреть количество коробок и сравнить с документами. 

4. Вскрыть коробку(и) и посмотреть на товар.

5. Сравниваем товар с тем, что заказал клиент. 

Если во время проверки выяснится, что товар не соответствует заказу (другое качество, не тот товар), то на склад не принимаем. Сразу отправляем машину обратно. Связываемся с клиентом, поставщиком и объясняем ситуацию.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Иногда грузовики заезжают внутрь склада

Выявить не тот товар или другое качество лучше на этапе приемки товара на склад. Потому что это упрощает возврат. Не придётся договариваться с поставщиком об оплате курьера и других делах. Не приняли, объяснили причину, товар увезли обратно. 

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Разгрузка погрузчиком

Если с товаром все хорошо, то его регистрируют в складской системе, присваивают номер, фотографируют и перемещают в клетку с номером на складе.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Зонирование на складе. За каждым клиентом закрепляем номер или несколько

Клиент видит в личном кабинете поступивший товар и общую фотографию.

Проверка товара (базовая)

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Принятый товар на склад обязательно проходит базовую проверку, от которой клиент не может отказаться. Мы точно должны знать, какой товар приняли, его точное количество. 

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Вскрываем коробки для стандартной проверки

Что включает в себя проверка: 

  • вскрытие каждой коробки;

  • подсчет количества;

  • подтверждение цвета, размера, модели; 

  • сравнение с карточкой товара (соответствие заказу).

Все операции с товаром проходят под камерами наблюдения. Записи хранятся на сервере. Если в будущем возникнет какой-то вопрос, то у нас будет запись с камер, где видно товар и все манипуляции сотрудника с ним. 

Сотрудники склада, в зависимости от должности, зарабатывают от $600 до $1500 в месяц. Они трудоустроены официально и мы оплачиваем их медицинскую страховку — это довольно редкая ситуация в логистических фирмах Китая. 

Был период, когда мы не проводили проверки по просьбе клиентов. В результате любая спорная ситуация могла обернуться скандалом. 

Например, клиент попросил не проверять товары от поставщика, с которым работает уже год, и максимально быстро отправить партию. 

После получения груза клиент недосчитался нескольких десятков товаров. Упаковка не повреждена, поставщик клянется, что положит все товары, а, значит, виноват логистический склад. А нам и ответить нечем, так как коробки не вскрывали, товары не смотрели. Не знаем, что приняли и в каком количестве отправили. 

Несколько таких случаев убедили нас, что приемка товара должна быть для всех клиентов. От нее нельзя отказаться.

Проверка по ТЗ клиента 

Клиент может запросить дополнительную проверку товара по своему техническому заданию. Для этого нужно в момент заказа сообщить менеджеру, что нужна особая проверка, и передать ТЗ. 

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Детальные проверки занимают много времени

Обычно у нас просят дополнительные фотографии и видео, поштучную проверку с выкладкой и включить устройство. Бывают и уникальные случаи. 

Например, один из клиентов попросил включить и проверить 100 проекторов. И сотрудник занимался этим несколько часов. 

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Раскладка для проверки

Стоимость дополнительной проверки зависит от сложности задачи. Иногда нужно привлекать к такой работе дополнительных сотрудников, что увеличивает цену.

Если клиент не запрашивал дополнительную проверку, то может возникнуть разные неприятные ситуации. Один из последних случаев.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

 Реальный цвет ручки отличается

Клиент заказал фиолетовые ручки без уточнения цвета по RAL (международная система соответствия цветов) и не сказал менеджеру, что цвет должен быть светло-фиолетовый и не прислал код RAL. Фотографию товара тоже не запросил. Поставщик сделал фотографию так, что ручки кажутся светлыми, на самом деле они гораздо темнее. Сотрудник склада посмотрел на ручки, увидел фиолетовый цвет и не стал акцентировать внимание на оттенках. 

После проверки товар укладывают обратно в коробки поставщика. Если же они повреждены, то предоставляем новую коробку. 

Клиенту сообщают, что весь товар проверен. Если что-то не так, то говорим об этом и ждем решения клиента. 

Бывает так, что поставщик прислал 90 белых маек и 10 серых, когда клиент заказывал 100 белых. Клиент решает, что делать с 10 серыми. Можно их вернуть поставщику, потребовав замену или деньги. На это уйдет время.

Обычно клиенты хотят получить товар, поэтому не ждут обмена или возврата средств. Или может решить, что 90 белых отправлять, а 10 серых возвращать. Тогда вернувшиеся деньги зачислим на счет клиента в его личном кабинете. Этот остаток он сможет использовать для оплаты товаров и услуг склада.

Упаковка 

При доставке товара маршрутами карго, особенно в Россию, важно плотно и надежно упаковать товар. Коробки от поставщика не защитят груз от повреждений в пути. Ведь при перевозке карго товары перебрасывают из одного грузовика в другой на территории логистических хабов в Казахстане и Кыргызстане. 

У нас пять видов упаковки: 

  1. Стандарт: упаковка поставщика + пленка, скотч, мешок. 

  2. Усиленная коробка: наша коробка, мешок, скотч. 

  3. Усиленная упаковка: уголки, пленка, мешок, скотч. 

  4. Обрешетка: коробка, пленка, мешок, скотч, обрешетка. 

  5. Палета: коробка, пленка, скотч, обрешетка, палета. 

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Варианты упаковки

Чем надежнее упаковка, тем сильнее ее влияние на стоимость доставки. Обрешетка увеличивает стоимость доставки минимум на 5%. И это без учета работы упаковщика и материалов. Из-за этого нельзя все товары упаковывать самым надежным способом. 

Клиент решает, какую упаковку выбрать для его товара. Это важное решение, поэтому менеджер лишь может дать рекомендацию. 

Почему менеджер не может решить за клиента, он же опытный специалист? В одной посылке клиент может отправлять хрупкий товар и одежду. Какую упаковку выбрать в таком случае? Если менеджер выберет обрешетку, то клиент заплатит дороже за доставку и будет недоволен. Выберет менеджер стандартный вариант, хрупкий товар повредится в пути, клиент снова недоволен. 

После нескольких таких ситуаций упаковку всегда выбирает клиент. Это его бизнес-решение. Менеджер может только объяснить разницу между упаковками и подсказать, но решений не принимает. 

Упаковочная зона и готовый грузы к отправке.

Удивительная каргобандистка из Китая: как работаем, услуги, сотрудники, зарплаты, склад, офис Бизнес, Малый бизнес, Китай, Китайские товары, Предпринимательство, Торговля, Логистика, Видео, Вертикальное видео, Короткие видео, Длиннопост, Блоги компаний

Между складами под крышей

Качество упаковки — важный показатель нашей работы. Если сэкономить на упаковочных материалах и товар клиента повредится в пути, то клиент останется недоволен.

Иногда клиенты спрашивают, а почему у вас упаковка дороже, чем где-то там? Приходится объяснять, что где-то там используют другие материалы или, например, приглашают упаковщиков с улицы на разовую работу, когда есть, что упаковать. У нас сотрудники работают в штате и умеют делать качественную упаковку. 

После упаковки товары взвешивают и считают объем. 

Взвешивание и подсчет объема  

Стоимость доставки маршрутами карго зависит от трех показателей: 

1.Маршрута доставки. Если везти груз в Россию через Казахстан, то получится быстрее, но дороже, чем через Кыргызстан, несмотря на расстояние. В Кыргызстане дешевле растаможка. Скорость доставки по маршруту «Экспресс» 12—15 дней, «Стандарт» 19—25 дней. Доставка «Экспресс» дороже примерно на 15%. 

2. Категория товара. Стоимость доставки «одежды» отличается от цены «обуви» или «детских игрушек» из-за разницы в цене растаможки на территории Казахстана и Кыргызстана. 

3.Плотность товара (вес упакованного товара разделить на объем). Одежду с плотностью 300 вести дешевле, чем с плотностью 100, так как она займет меньше места в грузовике. 

Увеличить плотность некоторых товаров можно с помощью пресса и вакуумной упаковки. Товары, которые не будут повреждены прессом, может упаковать «под пресс». 

После упаковки, взвешивания и расчета плотности груз отправляем в зону отгрузки. Ночью приедет грузовик от перевозчика, сотрудники погрузят товар и его повезут клиенту. Перевозкой товаров занимаются транспортные компании. 

Оплатить доставку клиент может как в Китай (предоплатой), так и после прибытия товара в логистический хаб в его стране. 

Страховка

Все грузы можно застраховать двумя способами: 

  1. Бесплатно с компенсацией до $5 на 1 кг. Эту страховку предоставляет перевозчик только на утерянный товар. Если коробка пропадет в пути, то перевозчик выплатит страховку клиенту. 

  2. С добавленным платежом 1.5—4% к общей сумме заказа в зависимости от категории товара и компенсацией до $100 на 1 кг потерянного груза. Этот страховочный фонд сформирован в нашей компании. Из него мы оплачиваем страховые случаи. 

Узнайте больше о нашей компании

Подпишитесь на Telegram. Рассказываем о Китае, бизнесе, публикуем отзывы клиентов и делимся актуальную информацией. 

Почитайте отзывы из WhatsApp и Вконтакте. 

Наш сайт со всей информацией и инструкциями: https://1688-master.com/ 

А еще у нас есть аккаунты в запрещенных сетях. Ссылки на них есть на сайте. 

Заключение 

Логистический бизнес в Китае даже с выстроенными бизнес-процессами и опытными сотрудниками — дело непростое. 

Кажется, что мы видели все: поссорившиеся рабочие подрались, менеджер не разобрался в вопросе, и клиент обиделся, 500 кг товара пришло на склад, а чей он — неизвестно... Просто клиент забыл сообщить менеджеру, что отправил нам оптовый груз.

Запуск каждой новой услуги — отдельное приключение. Так было с бизнес-туром. В 20:00 приходит сообщение на WhatsApp.… «Я приехал, где трансфер?». Клиент оплатил предварительный поиск поставщиков для индивидуального бизнес-тура, получил список и пропал на месяц. А тут неожиданно приехал… и никому об этом не сказал. Не делайте так. 

В начале 2025 года запустили «Битрикс24» и все еще переучиваемся работать через него. Идет тяжело. Мы уже видели десяток мнений, что  «Битрикс24» — это ошибка. Попробуем все-таки запустить. 


Реклама: NG KONG CE MASTER TRADING LIMITED, CR No: 2807197, erid: 2Vtzqw5PRHg

Реклама NG KONG CE MASTER TRADING LIMITED, CR No: 2807197

Показать полностью 22 3
[моё] Бизнес Малый бизнес Китай Китайские товары Предпринимательство Торговля Логистика Видео Вертикальное видео Короткие видео Длиннопост Блоги компаний
230
352
Mackedonsky
Mackedonsky
3 года назад
IT-юмор

О документации⁠⁠

Разработчики: Документация должна быть понятной, по делу и в официальном стиле
Так же разработчики:

О документации IT, Linux, Kernel, Техническая документация

Официальная документация по ядру linux.

P.S. перевод:

Внимание

Наименование «tasklet» вводит в заблуждение: оно не имеет ничего общего с «tasks»,  скорее всего оно связано с плохой водкой, которую в то время выпил Алексей Кузнецов(один из мэйнтейнеров ядра linux).

[моё] IT Linux Kernel Техническая документация
10
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии