Nhu cầu về điện toán đám mây của một đơn vị ứng dụng IoT

Là một công ty cung cấp giải pháp tự động hóa ứng dụng IoT cho các trang trại, AgriConnect tự mình nghiên cứu, phát triển phần cứng, phần mềm để làm ra giải pháp đó (theo dõi và duy trì điều kiện môi trường sao cho phù hợp với cây trồng). AgriConnect không mua sản phẩm rồi bán lại, vì nhu cầu mỗi khách hàng rất khác nhau. Bằng cách tự mình làm chủ công nghệ, AgriConnect có thể nhanh chóng, linh động tùy biến sản phẩm của mình để đáp ứng vừa vặn nhu cầu của khách hàng.

Tuy nhiên, AgriConnect cũng không ôm đồm làm hết mọi thứ. Giống như xây nhà thì vẫn phải mua gạch, mua xi măng, đinh ốc, AgriConnect vẫn cần những thứ mà các đơn vị khác đã làm và cung cấp lại (như server, cảm biến, vv..). Nhiều công ty công nghệ lớn như Google, Amazon, IBM, Samsung làm riêng một mảng sản phẩm / dịch vụ IoT để cung cấp cho những đối tượng tương tự như AgriConnect. Dẫu vậy, với lối đi khác biệt của mình, AgriConnect nảy sinh những nhu cầu mà các công ty vừa kể không thể đáp ứng được.

Một số nhu cầu đó là:

  1. Bare metal ARM server. Chúng tôi cần dùng nó để biên dịch một số phần mềm thành binary chạy trên ARM. Ví dụ như, chúng tôi customize hệ điều hành cho BeagleBone, bỏ bớt những thành phần không cần thiết, cài sẵn một số phần mềm, cài sẵn một số cấu hình, tạo ra file image cuối cùng để nhanh chóng cài lên nhiều board.

Flash BeagleBone firmware

Download image here: https://rcn-ee.com/rootfs/

Example file to download: https://rcn-ee.com/rootfs/2018-02-09/flasher/BBB-eMMC-flasher-debian-9.3-console-armhf-2018-02-09-2gb.img.xz. We should get Debian one, over Ubuntu.

If the file name starts with BBB-eMMC-flasher, this image will automatically run the flasher tool when the BeagleBone boots from Micro SD card, we don't need to press the button near to the Micro SD slot to activate the flasher tool.

We should use bmap-tool, instead of dd, because the later is very slow.

Nâng cấp Debian cho BeagleBone Black

BeagleBone Black khi bán ra thường được cài sẵn Debian 7 (Wheezy). Đây là phiên bản quá cũ (phát hành 2013) nên các phần mềm đi theo nó thường không đáp ứng đủ nhu cầu. Ví dụ tại AgriConnect, tôi viết phần mềm để chạy trên BeagleBone, dùng ngôn ngữ Python, cần những feature của Python 3.5 trở lên. Thế nhưng trong repository của Debian 7 chỉ có Python 3.2. Việc cài Python từ source code thì hơi bất tiện vì quá trình biên dịch khá nặng trong khi sức mạnh CPU của BeagleBone thì có hạn. Bởi vậy, tốt hơn thì nên nâng cấp Debian để sử dụng phần mềm, thư viện mới hơn từ repo của nó. Ví dụ, Debian 8 (Jessie) thì có Python 3.4, Debian 9 (Stretch) thì có Python 3.5.

Để nâng cấp Debian thì tôi thường lấy image từ https://rcn-ee.com/rootfs/. Để ghi image ra thẻ nhớ thì tôi không dùng dd, mà dùng bmaptool để cho tốc độc cao hơn và biết quá trình ghi tới đâu.

Khi nâng cấp Debian thì có một điều cần lưu ý là nên nâng cấp từng bước, từ 7 lên 8, 8 lên 9, chứ không nên nhảy cóc từ 7 lên 9. Lí do là bị vướng bootloader và tính năng bật tắt cape của BeagleBone.

Hiện nay, trên https://rcn-ee.com/rootfs/ không còn image Debian 8 nữa. Tôi đã kịp giữ lại một bản sao ở đây: http://quan.hoabinh.vn/Downloads/BeagleBone/Debian-2016-04/.

My packages store for BeagleBone running Debian 9

I'm building IoT gateway based on BeagleBone Black at the startup AgriConnect, with Python as the primary programming language.

When the application grows complex, the board shows to be weak. We cannot find stronger board than BeagleBone, so the only option is to try to make our app run lighter. We try to adopt latest Python version, now is 3.6, to take advantage of optimization work in them. The latest Debian image for BeagleBone is stretch (Debian 9), which doesn't include Python 3.6 in its repository.

There are some backport packages of Python 3.6 for Debian 9, but only for amd64 arch. Fortunately they provide a build script. I can use it to build for armhf arch, which is in BeagleBone boards.

How to build for armhf? The board is weak, we should not run the build process directly on BeagleBone. It can take some days!